elasticsearch 弹性搜索索引,elasticsearch,elasticsearch" /> elasticsearch 弹性搜索索引,elasticsearch,elasticsearch" />

elasticsearch 弹性搜索索引

elasticsearch 弹性搜索索引,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。我有两个索引,一个包含员工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,以便来自同一索引的所有条目都有相同的索引id


提前谢谢你的帮助!

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。