elasticsearch 多级聚合返回空字段单据

yv5phkfx  于 2023-05-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(116)

我们使用多级聚合。我们有城市的桶,每个桶都有阶级的桶。对于Few documents,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为空。但我们正在清点医生。terms字段为空,如何返回bucket下的单据
更新:CLASS的字段Map:

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

请参考Map来解决该问题。

qltillow

qltillow1#

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

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

通过这种设置,所有没有class_field字段(或空值)的文档都将落在NO_CLASS存储桶中。
PS:注意,这只适用于ES 2.0之后的版本,而在之前的版本中不适用。

相关问题