【发布时间】:2016-04-01 06:56:54
【问题描述】:
以下是示例文档:
{
"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" }
}
}
}
}
}
}
}
但是,这给了我这个错误:
类型为 [top_hits] 的聚合器 [last_score_hits] 无法接受 子聚合
如果还有另一种方法可以在不使用 top_hits 的情况下完成此搜索,那么我会全力以赴。
【问题讨论】:
标签: elasticsearch