嵌套字段上的Elasticsearch复合聚合查询

问题描述

我对嵌套对象的聚合有疑问。 文档就像:

{
    "features": [{
            "key": "key1","values": ["A","B"]
        },{
            "key": "key2","values": ["C","D"]
        },"values": ["E"]
        }
    ]
}

其中“功能”是一个嵌套对象。 我可以聚合并从键和值中获得不同的值,但是我需要在需要的地方进行合并的存储桶聚合:

键1-> A,B 键2-> C,D,E

是否必须使用复合聚合?还是使用哪种适当的聚合? 也欢迎Java示例!

谢谢!

解决方法

您实际上不需要composite。以下应该没问题:

{
  "size": 0,"aggs": {
    "nested_aggs": {
      "nested": {
        "path": "features"
      },"aggs": {
        "by_key": {
          "terms": {
            "field": "features.key.keyword"
          },"aggs": {
            "by_values": {
              "terms": {
                "field": "features.values.keyword"
              }
            }
          }
        }
      }
    }
  }
}

假设您的映射看起来像这样

{
  "mappings":{
    "properties":{
      "features":{
        "type":"nested","properties":{
          "key":{
            "type":"text","fields":{
              "keyword":{
                "type":"keyword","ignore_above":256
              }
            }
          },"values":{
            "type":"text","ignore_above":256
              }
            }
          }
        }
      }
    }
  }
}