elasticsearch 弹性搜索索引
我正在我的项目中使用elasticsearch。我有两个索引,一个包含员工id列表,另一个包含员工姓名、加入日期和员工id。我是否可以从一个索引中使用员工id并从其他索引中查找员工信息 包含员工id列表的索引: 2015年6月1日12:02:15.209消息:8997745 2015年6月1日12:02:15.210消息:8997728 2015年6月1日12:02:15.211消息:8997719 包含员工信息列表的索引: 2015年6月1日12:02:15.205消息:鲍勃,2015-05-318997745 2015年6月1日12:02:15.206消息:詹姆斯,2015-05-318997728 2015年6月1日12:02:15.207消息:Tom,2015-05-318997719 另外,我注意到索引中的每个条目都有一个唯一的id。是否有一种方法可以为索引提供一个唯一的id,以便来自同一索引的所有条目都有相同的索引idelasticsearch 弹性搜索索引,elasticsearch,elasticsearch,我正在我的项目中使用elasticsearch。我有两个索引,一个包含员工id列表,另一个包含员工姓名、加入日期和员工id。我是否可以从一个索引中使用员工id并从其他索引中查找员工信息 包含员工id列表的索引: 2015年6月1日12:02:15.209消息:8997745 2015年6月1日12:02:15.210消息:8997728 2015年6月1日12:02:15.211消息:8997719 包含员工信息列表的索引: 2015年6月1日12:02:15.205消息:鲍勃,2015-05-
提前谢谢你的帮助! elasticSearch相当于NoSQL,不要考虑将mysql模式迁移到elasticSearch(或MongoDB),这是行不通的,您必须重新考虑以尊重NoSQL理念
如果文档没有“id”字段,ES将生成一个。根据您的需要,您可以在代码中执行此操作(从index1读取员工id并执行id筛选器查找() 这可能不适用于大型员工列表。如果第一个索引中的列表非常大,并且包含员工ID,那么对第二个索引执行扫描滚动查询并检查从查询到第一个索引()的员工ID可能会很有用。当然,您会丢失排序
对于非常大的数据集,一个更高级的选择可能是使用elasticsearch hadoop并编写Spark SQL查询或类似的东西。这实际上取决于用例。为什么第一个索引只有员工id?elasticsearch索引中的每个文档都应该有一个唯一的id。如Thomas所说,elasticsearch是在NoSQL中,不要考虑将mysql模式迁移到elasticSearch。 但是为了帮助你, 要执行类似于联接的操作,应该在映射中定义一个。类似于我们在SQL中使用的外键
{
"mappings": {
"department": {
},
"employee": {
"_parent": {
"type": "department"
}
}
}
}
然后您可以搜索员工索引并将其与部门匹配
{
"query": {
"has_parent": {
"type": "department",
"query": {
"match": {
"name": "something"
}
}
}
}
}
您可以在映射定义中使用来存储每个员工的已定义ID。Elasticsearch本机不支持加入操作。有许多第三方解决方案可以缓解此问题,但是,所有解决方案都在“应用程序层”中解决此问题从Elasticsearch的角度来看,这意味着Elasticsearch仍然需要发送所有数据,并让其他应用程序帮助连接操作 正如建议的那样,您可以使用嵌套查询来模拟连接操作。但是您需要更新映射设计,并且性能可能不适合您的需要
我建议在Elasticsearch中使用supported。您可以将联接操作视为两个连续的操作:筛选和组合。使用筛选所需的记录,然后在应用程序中自行组合数据。因为Elasticsearch本机支持术语查找,并且从Elasticsearch中检索到的记录很少,然后是com在你的应用程序中,这个过程会非常快。根据我的经验,在10秒内可以过滤出数百万条记录。你能从两个索引中发布映射吗?你应该将elasticsearch用作平面表,而不是带有内部联接的classsic SQL DB。