最近工作中遇到一個需求 需要統計一段時間內 用戶某個特定操作的次數,然后還要顯示出用戶昵稱。
開始覺得很簡單,想着聚合一下用戶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