【发布时间】:2016-11-06 19:37:30
【问题描述】:
我的数据如下:
{"action":"CREATE","docs":1,"date":"2016 Jun 26 12:00:12","userid":"1234"}
{"action":"REPLACE","docs":2,"date":"2016 Jun 27 12:00:12","userid":"1234"}
{"action":"REPLACE","docs":1,"date":"2016 Jun 27 13:00:12","userid":"1234"}
{"action":"CREATE","docs":1,"date":"2016 Jun 28 12:00:12","userid":"3431"}
{"action":"REPLACE","docs":2,"date":"2016 Jun 28 13:00:12","userid":"3431"}
{"action":"CREATE","docs":1,"date":"2016 Jun 29 12:00:12","userid":"9999"}
为了按日期(降序)获取每个唯一用户订单的记录,我使用了 Top Hits,如下所示:
"aggs": {
"user_bucket": {
"terms": {
"field": "userid"
},
"aggs": {
"user_latest_count": {
"top_hits": {
"size": 1,
"sort": [
{
"data": {
"order": "desc"
}
}
],
"_source": {
"include": [
"docs"
]
}
}
}
}
}
}
以上查询结果如下:
{"action":"REPLACE","docs":1,"date":"2016 Jun 27 13:00:12","userid":"1234"}
{"action":"REPLACE","docs":2,"date":"2016 Jun 28 13:00:12","userid":"3431"}
{"action":"CREATE","docs":1,"date":"2016 Jun 29 12:00:12","userid":"9999"}
现在,我想进一步汇总,结果如下:
{"sum_of_different_buckets": 4}
但不确定如何从上面获得的结果中SUM字段“docs”值。
【问题讨论】:
-
我不明白你想要达到什么目的。总结哪些文档值?结果应该如何?
-
我已编辑问题,请立即查看。基本上,我需要在 Top Hits 聚合之上再增加一层聚合,以便获得字段“docs”的总和。
-
我不认为这是可能的,因为您想使用 top_hits 的输出,并且此聚合之后不能用于其他聚合。你不能只在你自己的代码/应用程序中求和吗?
-
您可以在查询中添加排序,然后使用
terms聚合,然后在该聚合上使用docs字段的sum聚合。
标签: elasticsearch