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

ejk8hzay  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(462)

我有一个关于嵌套对象聚合的问题。文档类似于:

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

其中“features”是嵌套对象。我可以从key和value中聚合并获取不同的值,但我需要一个组合的bucket聚合,其中我需要:
键1->a,b键2->c,d,e
是否必须使用复合聚合?或者使用哪种聚合是正确的?欢迎使用java示例!
谢谢!!!

qaxu7uf2

qaxu7uf21#

你真的不需要 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"
              }
            }
          }
        }
      }
    }
  }
}

假设你的Map是这样的

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

相关问题