在 Elasticsearch 中聚合后排序

Sorting after aggregation in Elasticsearch

我有这种结构的文档:

{
    FIELD1:string,
    FIELD2:
        [ {SUBFIELD:number}, {SUBFIELD:number}...]
}

我想对 FIELD2.SUBFIELDs 中数字总和的结果进行排序:

GET myindex/_search
{
  "size":0,
  "aggs": {
    "a1": {
      "terms": { 
        "field": "FIELD1",
        "size":0
      },
      "aggs":{
        "a2":{
          "sum":{
            "field":"FIELD2.SUBFIELD"
          }
        }
      }
    }
  }
}

如果我这样做,我将获得未排序的存储桶,但我希望存储桶按 "a2" 值排序。 我该怎么做? 谢谢!

你几乎成功了。您只需要将 order property 添加到 a1 术语聚合中,如下所示:

GET myindex/_search
{
  "size":0,
  "aggs": {
    "a1": {
      "terms": { 
        "field": "FIELD1",
        "size":0,
        "order": {"a2": "desc"}      <--- add this
      },
      "aggs":{
        "a2":{
          "sum":{
            "field":"FIELD2.SUBFIELD"
          }
        }
      }
    }
  }
}

来自 Val 的精彩 https://whosebug.com/users/4604579/val

基本上是一样的,但以下是我为每个 "name" 找到最大的 "size" 并显示前 25 个最大的方法:

{
  "size": 0,
  "aggs": {
    "agg1": {
      "terms": {
        "field": "name.keyword",
        "order": {
          "agg2": "desc"
        },
        "size": 25
      },
      "aggs": {
        "agg2": {
          "max": {
            "field": "size"
          }
        }
      }
    }
  }
}