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

时间:2017-04-06 06:55:01

标签: elasticsearch

我正在使用Elasticsearch 5.3。我想使用计数字段然后按另一个字段分组。最重要的是,我希望得到该文件中的其他字段。

"aggs" : {
  "people" : {
    "terms" : { "field" : "name" },
    "aggs" : {
      "event_count" : { "value_count" : { "field" : "event" } }
    }
  }
}

上述ES查询等同于SELECT COUNT(event) FROM table GROUP BY name;。新的ES查询应该类似于SQL查询:SELECT name, address, age, COUNT(event) FROM table GROUP BY name;。我该怎么做?

1 个答案:

答案 0 :(得分:2)

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

{
  "aggs": {
    "plans": {
      "people": {
        "field": "name"
      },
      "aggs": {
        "docs": {
          "top_hits": {
            "size": 1,
            "_source": [ "address", "age" ]
          }
        },
        "event_count": {
          "value_count": {
            "field": "event"
          }
        }
      }
    }
  }
}

您需要意识到,在您的SQL查询中,您还应该按ageaddress进行分组,否则您将会错过"如果您只按name分组,则会显示其中一些值。尝试一下,你会发现差异。