在多级聚合中返回具有空字段的文档

时间:2016-02-05 03:17:36

标签: elasticsearch

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

示例输出:

"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":[
            
              
            
          ]
        }
      },
    ]
      
    
  }
}

此处关键的CITY 2有一个空桶CLASS,因为关键CITY 2下的所有文件都将CITY字段设为null。但我们有一个医生计数。 当术语字段为空时,我们如何在桶下返回文件

更新: CLASS的字段映射:

"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"
                        }
                    }
                }

请参阅映射以解决问题。

1 个答案:

答案 0 :(得分:1)

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

{
  "aggs": {
    "CITY": {
      "terms": {
        "field": "city_field"
      },
      "aggs": {
        "CLASS": {
          "terms": {
            "field": "class_field",
            "missing": "NO_CLASS"
          }
        }
      }
    }
  }
}

使用此设置,所有没有class_field字段(或空值)的文档将落在NO_CLASS存储桶中。

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