gpt4 book ai didi

elasticsearch - 如何按根文档中的字段对嵌套聚合中的热门命中进行排序?

转载 作者:行者123 更新时间:2023-12-02 22:30:48 24 4
gpt4 key购买 nike

我正在嵌套聚合中执行热门聚合。我希望通过根文档中的时间戳字段来排序最高命中,以便获得嵌套文档的最新版本(可能被索引到多个根文档中)。虽然语法似乎让我这样做,但提取的排序键似乎是“垃圾”;每个文档的数量都相同。 (以下只是一个更复杂的聚合的片段——否则,该方法可能没有意义——但它具有我的问题的本质。)

{
"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'},

最佳答案

我遇到了同样的问题,然后我在嵌套聚合中提供了一种解决方案。在此我们可以在 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"
}
}

}
}
}
}

希望这能解决您的问题。

关于elasticsearch - 如何按根文档中的字段对嵌套聚合中的热门命中进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com