返回多级聚合中包含空字段的文档

cod*_*lue 4 elasticsearch

我们正在使用多级聚合。我们有城市桶,每个桶都有阶级桶。对于少数文档,类为空,在这种情况下,将为城市返回一个空桶。请参考以下回复:

示例输出:

"aggregations":
{
  "CITY":{
    "buckets":[
      {
        "key":"CITY 1",
        "doc_count":2
        "CLASS":{
          "buckets":[
            {
              "key":"CLASS A",
              "top_tag_hits":{
                
              }
            }
          ]
        }
      },
      {
        "key":"CITY 2",
        "doc_count":2
        "CLASS":{
          "buckets":[
            
              
            
          ]
        }
      },
    ]
      
    
  }
}
Run Code Online (Sandbox Code Playgroud)

这里,键 CITY 2 有一个空的 CLASS 桶,因为键 CITY 2 下的所有文档的 CITY 字段都为空。但我们正在统计文档数量。terms字段为null时如何返回bucket下的文档

更新:类别的字段映射:

"CLASS":
        {
                    "type": "string",

                    "index_analyzer": "text_with_autocomplete_analyzer",
                    "search_analyzer": "text_standard_analyzer",
                    "fields": {
                        "raw": {
                            "type": "string",
                             "null_value" : "na",
                            "index": "not_analyzed"
                        },
                        "partial_matching": {
                            "type": "string",
                            "index_analyzer": "text_with_partial_matching_analyzer",
                            "search_analyzer": "text_standard_analyzer"
                        }
                    }
                }
Run Code Online (Sandbox Code Playgroud)

请参考映射来解决问题。

Val*_*Val 7

您可以使用聚合missing设置来处理缺少值的存储桶terms所以在你的情况下,你会这样做:

{
  "aggs": {
    "CITY": {
      "terms": {
        "field": "city_field"
      },
      "aggs": {
        "CLASS": {
          "terms": {
            "field": "class_field",
            "missing": "NO_CLASS"
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

通过此设置,所有没有class_field字段(或空值)的文档都将放入NO_CLASS存储桶中。

PS:请注意,这只适用于 ES 2.0,而不适用于之前的版本。