【问题标题】:Elasticsearch count occurrences of a value in a nested documentElasticsearch 计算嵌套文档中某个值的出现次数
【发布时间】:2019-06-21 17:26:22
【问题描述】:

有没有办法计算嵌套类型中的特定值(例如services.service: "map")在所有文档中出现的次数?

文档可能如下所示:

{
  "services": [
    {
      "service": "map",
      "version": 2,
      "provider": "none"
    },
    {
      "service": "map",
      "version": 0,
      "provider": "none"
    },
    {
      "service": "language",
      "version": 2,
      "provider": "none"
    }
  ],
  "date": "2019-04-26T19:17:20.197Z"
}

使用此映射:

{
  "mappings": {
    "stat": {
      "properties": {
        "services": {
          "type": "nested",
          "properties": {
            "version": {
              "type": "keyword"
            },
            "provider": {
              "type": "keyword"
            },
            "service": {
              "type": "keyword"
            }
          }
        },
        "date": {
          "type": "date"
        }
      }
    }
  }
}

我尽可能返回每个文档的计数(请参阅下面的查询),但我更喜欢从我的所有文档中获取最终出现次数的总和。

{
 "query": {
   "nested": {
     "path": "services",
     "query": {
         "match" : {
             "services.service" : "map"
         }
     },
     "inner_hits": {
       "_source" : false,
       "docvalue_fields" : ["services.service.keyword"]
     }
   }
 }
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我认为最好的方法是将嵌套聚合与术语聚合结合使用,因为您的字段属于关键字类型。您可以将 include 属性添加到聚合中,以仅获取特定值(或多个,当作为数组传递时)的存储桶。

    您发布的案例的查询如下所示:

    GET myindex/_search
    {
      "size": 0,
      "aggs": {
        "services": {
          "nested": {
            "path": "services"
          },
          "aggs": {
            "service_count": {
              "terms": {
                "field": "services.service",
                "include": "map"
              }
            }
          }
        }
      }
    }
    

    要了解有关嵌套聚合的更多信息,see the docs

    【讨论】:

    • 非常感谢您的询问和解释。它按预期工作!
    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2020-03-03
    • 2018-12-30
    • 2015-03-16
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多