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

Elasticsearch composite aggregate query on nested fields

我对嵌套对象的聚合有疑问。 文档如下:

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

其中 'features' 是嵌套对象。 我可以聚合并从键和值中获取不同的值,但我需要在需要的地方获得组合的桶聚合:

key1 -> 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",
            "fields":{
              "keyword":{
                "type":"keyword",
                "ignore_above":256
              }
            }
          }
        }
      }
    }
  }
}