我在嵌套聚合中执行热门命中聚合。我希望通过根文档中的时间戳字段来命令顶部命中,以便获得嵌套文档的最新版本(可以将其索引到多个根文档中)。虽然语法似乎让我这样做,但提取的排序键似乎是' junk&#39 ;;每个文件的数字都相同。 (以下只是更复杂聚合的片段 - 否则,这种方法可能毫无意义 - 但它具有我问题的本质。)
{
"size": 0,
"aggs": {
"nested_doc": {
"nested": {
"path": "nested_doc"
},
"aggs": {
"most_recent": {
"top_hits": {
"sort": "_index_time"
}
}
}
}
}
}
在我的结果中,排序键与任何此类" _index_time"都不匹配,并且更改排序顺序无效。 " _index_time"声明为根文档上的整数。如果我改变" _index_time"在对一些无意义的字符串的查询中,查询错误了,所以我知道它正在理解我在问什么,但它没有执行排序 - 或者,至少,它没有得到要排序的正确数据。
如何正确对根属性上的嵌套聚合进行排序?
或者,我尝试添加copy_to:' nested_doc._index_time'到了' _index_time'声明,虽然这让我指定了'nested_doc._index_time'作为排序键,它仍然导致无意义的排序键。该字段是否未正确定义?
_index_time: { type: 'integer'},
答案 0 :(得分:1)
我遇到了同样的问题,然后在嵌套聚合中提出了一种解决方案。在此,我们可以在index_time
上添加最大聚合的并行聚合。然后根据您添加的最大聚合对其进行排序。
您只需要根据第一级的汇总调整order
语句即可。
请查看以下查询:
{
"size": 0,
"aggs": {
"nested_doc": {
"nested": {
"path": "nested_doc"
},
"order": {
"max_date": "asc"
}
"aggs": {
"most_recent": {
"top_hits": {
"sort": "_index_time"
}
},
"max_date": {
"max": {
"field": "_index_time"
}
}
}
}
}
}
希望这可以解决您的问题。