gpt4 book ai didi

elasticsearch - 如何在 elasticsearch 中聚合 top_hits 结果

转载 作者:行者123 更新时间:2023-12-01 14:04:50 26 4
gpt4 key购买 nike

以下是示例文档:

{
"player": "Jim",
"score" : 5
"timestamp": 1459492890000
}

{
"player": "Jim",
"score" : 7
"timestamp": 1459492895000
}

{
"player": "Dave",
"score" : 9
"timestamp": 1459492894000
}

{
"player": "Dave",
"score" : 4
"timestamp": 1459492898000
}

我想获取每个玩家的最新分数,然后获取所有这些分数的平均值。所以答案是5.5。 Jim 的最新分数是 7,Dave 的最新分数是 4。两者的平均分是 5.5

我发现获取玩家“最新”文档的唯一方法是使用 top_hits 聚合。但是,我似乎无法在获得最新文档后进行另一次聚合。

这是我想出的最好的:

{
"aggs": {
"last_score": {
"terms": { "field": "player" },
"aggs": {
"last_score_hits": {
"top_hits": {
"sort": [ { "timestamp": { "order": "desc" } } ],
"size": 1
},
"aggs": {
"avg_score": {
"avg": { "field": "score" }
}
}
}
}
}
}
}

但是,这给了我这个错误:

Aggregator [last_score_hits] of type [top_hits] cannot accept sub-aggregations

如果还有另一种方法可以在不使用 top_hits 的情况下完成此搜索,那么我会全力以赴。

最佳答案

您正在尝试将 avg_score 作为 last_score_hits 的子聚合。要获得成功,您必须将 avg_score 作为 last_score 的子聚合。请看下面的例子:

{
"aggs": {
"last_score": {
"terms": {
"field": "player"
},
"aggs": {
"last_score_hits": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"size": 1
}
},
"avg_score": {
"avg": {
"field": "score"
}
}
}
}
}
}

关于elasticsearch - 如何在 elasticsearch 中聚合 top_hits 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349897/

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