给出elasticsearch索引中的以下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
字段也无法正常工作。
答案 0 :(得分:0)
要回答我自己的问题based on this answer,如果不使用top_hits
聚合,就无法做到这一点。我认为我想要实现的目标并不是聚合的最佳用途。相反,我会通过将latestPublished
true添加到相关模型来调整索引模型,从而允许查询为{ term: { latestPublished: true}}
。