最近工作中遇到一个需求 需要统计一段时间内 用户某个特定操作的次数,然后还要显示出用户昵称。
开始觉得很简单,想着聚合一下用户ID 结果就出来了,
{ "query": { "bool": { "must": [ { "term": { "operatetype": "ceshi" } }, { "term": { "ceshiHit": 1 } }, { "range": { "unixtime": { "gte": 1514822400000, "lte": 1514905200000 } } }, { "range": { "ceshiRate": { "gte": 1000 } } } ] } }, "from": 0, "size": 0, "sort": [ { "unixtime": "desc" } ], "aggs": { "usergroup": { "terms": { "field": "uid", "size": 0 }, "aggs": { "points": { "sum": { "field": "ceshiRate" } } } } } }
聚合出来后 想要聚合字段对应的一条详细信息,来获取用户的昵称之类的固定信息,调查了一番也没找到解决方案。
无奈只好知乎走一走。再次记录一下解决方案。
在聚合中加入
"aggs": { "userdetail": { "top_hits": { "size": 1 } } }
使用top_hits即可获取需要的信息。
Elasticsearch 文档链接
https://www.elastic.co/blog/top-hits-aggregation