如何在elasticsearch中进行多值计数聚合

How to do multi value count aggregation in elasticsearch

有没有办法进行 "multi value count" 聚合? 它的工作方式与常规值计数相同:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html

但是会被用来统计多个字段。

例如我们有一个映射:

"properties" : {
        "lastName" : { "type" : "string" },
        "firstName" : { "type" : "string" },
        "age" : { "type" : "string" }
}

以及以下 4 个文档:

{"lastName":"Smith"}
{"lastName":"Jacobson", "firstName":"Scott"}
{"lastName":"Bush", "age": 68}
{"lastName":"Obama", "firstName":"Barack", "age":53}

我想计算有年龄或名字的文件数量。 在我的例子中,聚合将 return 3.

有什么想法吗?我尝试使用脚本函数:

"aggregation_name" : {
  "value_count" : {
    "script" : "doc['age'].value + doc['firstName'].value"
  }
}

但似乎没有用。

谢谢!

您可以使用 filter aggregation and Exists filter -

实现此目的
{
  "aggs": {
    "CountSpec": {
      "filter": {
        "bool": {
          "should": [
            {
              "exists": {
                "field": "age"
              }
            },
            {
              "exists": {
                "field": "firstName"
              }
            }
          ]
        }
      }
    }
  }
}