聚合查询:如何通过文档计数聚合和获取多个值?

时间:2016-06-08 14:22:17

标签: elasticsearch nest

我有多个弹性文档,字段为“cityId”,“cityName”。我想计算具有特定“cityId”和“cityName”的文档的出现次数。

用于获取cityId和count的聚合查询:

GET _search
{
  "aggs": {
    "CityIdCount": {
      "terms": {
        "field": "cityId",
        "size": 0
      }
    }
  },
  "query": {
    "bool": {
      "must": [
...........................

这是现有查询,它将结果显示为(key为cityId,doc_count为出现次数: {                “关键”:40,                “doc_count”:4906 },

这是我尝试获取的查询(cityId,cityName,doc_count),它将结果显示为(key为cityName,doc_count为该名称的出现次数:{                “关键”:“塔那”,                “doc_count”:4906             }

GET _search
{
  "aggs": {
    "CityIdCount": {
      "terms": {
        "field": "cityId",
        "field": "cityName",
        "size": 0
      }
    }
  },
  "query": {
    "bool": {
      "must": [
   ..............................

我想要所有人,例如:“cityId”,“cityName”,“doc_count”。

对此有什么正确的查询?

1 个答案:

答案 0 :(得分:1)

您不能(目前至少)以您建议的方式在多个字段的组合中执行术语聚合。您可以通过以下两种方式之一来实现:

  1. 使用连接要执行聚合的字段的terms aggregation with a script。这可能对您的用例表现得足够好,但请注意您在查询时支付了性能成本。
  2. 将您要在索引时执行聚合的字段值合并到新的not_analyzed字段中,例如cityIdAndName在您的应用程序中或使用copy_to并在此字段上使用聚合术语。这将比第一个选项执行得更好,但代价是索引更多数据。