TL; DR::在外部多桶聚合中使用内部多桶聚合(top_hits
和size: 1
)可以进行排序内桶中的数据将外聚合的桶放在哪儿?
我有以下索引映射
{
"parent": {
"properties": {
"children": {
"type": "nested",
"properties": {
"child_id": { "type": "keyword" }
}
}
}
}
}
(数据中的每个子对象)还具有属性last_modified: Date
和other_property: String
。
我需要获取(所有父母但没有父母的)孩子名单,但每个last_modified
的孩子只有child_id
个最新的孩子。然后,我需要对这些结果进行排序和分页,以返回可管理的数据量。
我能够使用nested
,terms
,top_hits
和bucket_sort
聚合的组合来获取数据并对其进行分页(并获得总计用cardinality
来计数)
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"children": {
"nested": {
"path": "children"
},
"aggs": {
"totalCount": {
"cardinality": {
"field": "children.child_id"
}
},
"oneChildPerId": {
"terms": {
"field": "children.child_id",
"order": { "_term": "asc" },
"size": 1000000
},
"aggs": {
"lastModified": {
"top_hits": {
"_source": [
"children.other_property"
],
"sort": {
"children.last_modified": {
"order": "desc"
}
},
"size": 1
}
},
"paginate": {
"bucket_sort": {
"from": 36,
"size": 3
}
}
}
}
}
}
}
}
但是经过一天的研究和实验,我们似乎还不知道如何根据oneChildPerId
来分类other_property
聚合的存储桶通过lastModified
聚合检索的单个孩子。
是否有一种方法可以根据嵌套的多桶聚合结果对多桶聚合进行排序?
我尝试过的事情:
bucket_sort
,但显然,它的sort
仅可用于包含其他单桶聚合并以精确的结尾的路径。lastModified
的1结果多桶转换为单桶,但没有找到任何东西。 我正在使用ElasticSearch 6.8.6(在ES 5.x和更早版本中没有bucket_sort
和类似工具)。