首页 > 解决方案 > 如何加入 elasticsearch 索引进行排序?

问题描述

有没有首选的方法来加入两个 Elasticsearch 索引,以便我可以对查询进行排序?

索引 #1

// GET /activities/_doc/1aadea40-e93b-42b4-9c76-05ebed4335fe (simplified output)
{
  "_index" : "activities-1605040906149",
  "_type" : "_doc",
  "_id" : "1aadea40-e93b-42b4-9c76-05ebed4335fe",
  "_source" : {
    "date" : 1614286078420,
    "activityId" : "1aadea40-e93b-42b4-9c76-05ebed4335fe",
    "referralId" : "943f6d94-b2dd-4e89-9383-447fdd1d73d8",
    "duration" : 90
  }
}

索引 #2

// GET /referrals/_doc/2c022a6e-2543-4cdd-8595-98aea41e8966 (simplified output)
{
  "_index" : "referrals-1612984843755",
  "_type" : "_doc",
  "_id" : "2c022a6e-2543-4cdd-8595-98aea41e8966",
  "_source" : {
    "displayName" : "JOHN DOE",
    "referralId" : "2c022a6e-2543-4cdd-8595-98aea41e8966",
  }
}

我希望能够将referrals索引的内容与我的activities索引的内容连接起来,然后根据推荐人的displayName. 我需要为数万条记录执行此操作。

其他解决方案包括非规范化我的数据,但我希望看看是否有其他方法。

标签: elasticsearch

解决方案


您可以通过以下方式进行连接

  • 嵌套结构:使用对象映射,无需连接

  • 父子关系:使用“类型”字段来区分您使用不同类型的相同索引的文档,将父子索引到同一个分片中,因此查询将仅限于单个分片

  • 应用端加入:例如,直接在推荐文档中添加活动字段,允许您直接搜索/查询它们。

然后您可以根据推荐人的字段进行排序


推荐阅读