elasticsearch - 如何加入 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
. 我需要为数万条记录执行此操作。
其他解决方案包括非规范化我的数据,但我希望看看是否有其他方法。
解决方案
您可以通过以下方式进行连接
嵌套结构:使用对象映射,无需连接
父子关系:使用“类型”字段来区分您使用不同类型的相同索引的文档,将父子索引到同一个分片中,因此查询将仅限于单个分片
应用端加入:例如,直接在推荐文档中添加活动字段,允许您直接搜索/查询它们。
然后您可以根据推荐人的字段进行排序
推荐阅读
- android - MaterialButton 样式不适用于 Android 5.0 (api 21)
- vue.js - vue:运行 npm install --save 后找不到依赖项
- java - 如何将数组元素转换为二进制值
- python - 在 python cgi 中执行 shell 命令的问题
- reactjs - 如何在反应js中获取表格行中的点击事件
- javascript - 下拉菜单创建 - 常量错误 - 意外错误,需要语法 ';'
- sql - 如何在 SQL Server 中计算借方和贷方余额?
- regex - 正则表达式获取仅包含字母的“单词”并忽略字母和数字的组合
- swift - 我应该使用哪个动画师来交换 UILabel.text 值?
- c++ - 我可以安全地转换为返回 void 的函数吗?