如何在 Elasticsearch 中获取其他字段以及术语聚合?

kha*_*eeb 4 elasticsearch

我正在使用 Elasticsearch 5.3。我想使用对一个字段进行计数,然后按另一个字段进行分组。除此之外,我还希望获得该文档中的其他字段。

"aggs" : {
  "people" : {
    "terms" : { "field" : "name" },
    "aggs" : {
      "event_count" : { "value_count" : { "field" : "event" } }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的ES查询相当于SELECT COUNT(event) FROM table GROUP BY name;. 新的 ES 查询应该像这样的 SQL 查询:SELECT name, address, age, COUNT(event) FROM table GROUP BY name;。我该怎么做呢?

Val*_*Val 6

实现此目的的一种方法是使用top_hits聚合:

{
  "aggs": {
    "plans": {
      "people": {
        "field": "name"
      },
      "aggs": {
        "docs": {
          "top_hits": {
            "size": 1,
            "_source": [ "address", "age" ]
          }
        },
        "event_count": {
          "value_count": {
            "field": "event"
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您需要意识到,在 SQL 查询中,您还应该进行分组ageaddress否则,如果您只进行分组,您将“错过”它们的一些值name。尝试一下,您就会发现差异。