【发布时间】:2016-06-09 17:37:45
【问题描述】:
给定弹性搜索索引中的以下 4 个对象:
"hits": [
{
"_id": "0:0",
"_source": {
"id": 0,
"version": 0,
"published": true
}
},
{
"_id": "0:1",
"_source": {
"id": 0,
"version": 1,
"published": false,
"latest": true
}
},
{
"_id": "1:0",
"_source": {
"id": 1,
"version": 0,
"published": true
}
},
{
"_id": "1:1",
"_source": {
"id": 1,
"version": 1,
"published": true,
"latest": true
}
}
]
我想使用这些规则查找文档:
- 与
published:true - 没有重复的
id - 对于具有相同
id的文档,应返回最高的version。
因此,对于上述内容,我想获得0:0 和1:1:
"hits": [
{
"_id": "0:0",
"_source": {
"id": 0,
"version": 0,
"published": true
}
},
{
"_id": "1:1",
"_source": {
"id": 1,
"version": 1,
"published": true,
"latest": true
}
}
]
我知道我可以使用top_hits,但我想知道如果没有它是否可行,这样主hits.hits 数组将包含这些结果。
我可能会按如下方式折叠:
{
query : {...},
aggs : {
ids: {
terms: {
field: "id"
},
aggs:{
dedup:{
top_hits:{ size:1, sort: {version : 'desc'} }
}
}
}
}
}
我希望避免使用top_hits 的原因是我需要在我们的应用程序中更新结果解析器。如果我这样做,size 字段也将无法正常工作。
【问题讨论】:
标签: elasticsearch