我正在寻找对文档下的属性值进行最大聚合的方法,该属性是复杂对象(键和值)的列表。这是我的数据:

[{
    "id" : "1",
    "listItems" :
        [
            {
                "key" : "li1",
                "value" : 100
            },
            {
                "key" : "li2",
                "value" : 5000
            }
        ]
},
{
    "id" : "2",
    "listItems" :
        [
            {
                "key" : "li3",
                "value" : 200
            },
            {
                "key" : "li2",
                "value" : 2000
            }
        ]
}]
当我在“listItems.value”上执行嵌套的最大聚合时,我期望返回的最大值为200(而不是5000),原因是我希望逻辑首先为每个文档计算listItems下的MIN值,然后在此上进行最大聚合。是否可以做这样的事情?
谢谢。

最佳答案

搜索查询执行以下聚合:
id字段上的

  • Terms aggregation
  • 上的
  • Min aggregation
  • Max bucket aggregation是同级管道聚合,它在同级聚合中标识具有指定指标最大值的存储桶,并输出该存储桶的值和密钥。

  • 请引用nested aggregation以获得详细说明。
    添加带有索引数据,索引映射,搜索查询和搜索结果的工作示例。
    索引映射:
    {
      "mappings": {
        "properties": {
          "listItems": {
            "type": "nested"
          },
          "id":{
            "type":"text",
            "fielddata":"true"
          }
        }
      }
    }
    
    索引数据:
    {
        "id" : "1",
        "listItems" :
            [
                {
                    "key" : "li1",
                    "value" : 100
                },
                {
                    "key" : "li2",
                    "value" : 5000
                }
            ]
    }
    {
        "id" : "2",
        "listItems" :
            [
                {
                    "key" : "li3",
                    "value" : 200
                },
                {
                    "key" : "li2",
                    "value" : 2000
                }
            ]
    }
    
    搜索查询:
        {
        "size": 0,
        "aggs": {
            "id_terms": {
                "terms": {
                    "field": "id"
                },
                "aggs": {
                    "nested_entries": {
                        "nested": {
                            "path": "listItems"
                        },
                        "aggs": {
                            "min_position": {
                                "min": {
                                    "field": "listItems.value"
                                }
                            }
                        }
                    }
                }
            },
            "maxValue": {
                "max_bucket": {
                    "buckets_path": "id_terms>nested_entries>min_position"
                }
            }
        }
    }
    
    搜索结果:
    "aggregations": {
        "id_terms": {
          "doc_count_error_upper_bound": 0,
          "sum_other_doc_count": 0,
          "buckets": [
            {
              "key": "1",
              "doc_count": 1,
              "nested_entries": {
                "doc_count": 2,
                "min_position": {
                  "value": 100.0
                }
              }
            },
            {
              "key": "2",
              "doc_count": 1,
              "nested_entries": {
                "doc_count": 2,
                "min_position": {
                  "value": 200.0
                }
              }
            }
          ]
        },
        "maxValue": {
          "value": 200.0,
          "keys": [
            "2"
          ]
        }
      }
    

    10-06 10:58