Elasticsearch 聚合字段后 获取聚合字段的单条详细信息

最近工作中遇到一个需求 需要统计一段时间内 用户某个特定操作的次数,然后还要显示出用户昵称。

开始觉得很简单,想着聚合一下用户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

posted @ 2018-01-02 15:57  脑残之神  阅读(7137)  评论(0编辑  收藏  举报