首页 > 解决方案 > 嵌套字段上的 Elasticsearch 复合聚合查询

问题描述

我对嵌套对象的聚合有疑问。文件是这样的:

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

其中“特征”是一个嵌套对象。我可以聚合并从键和值中获取不同的值,但我需要获得一个组合的桶聚合,我需要:

key1 -> A,B key2 -> C,D,E

是否必须使用复合聚合?或者哪个是正确的聚合?也欢迎 Java 示例!

谢谢!!!

标签: elasticsearchaggregation

解决方案


你真的不需要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",
            "fields":{
              "keyword":{
                "type":"keyword",
                "ignore_above":256
              }
            }
          }
        }
      }
    }
  }
}

推荐阅读