web-dev-qa-db-ja.com

Elasticsearchでの集計後の並べ替え

私はこの構造を持つドキュメントを持っています:

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

FIELD2.SUBFIELDの数値の合計の結果で並べ替えたい:

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

これを行うと、ソートされていないバケットが取得されますが、「a2」値でソートされたバケットが必要です。どうすればできますか?ありがとうございました!

12
maxv15

あなたはそれをほとんど持っていました。次のように、 order propertya1用語の集計に追加するだけです。

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

Valから素晴らしい https://stackoverflow.com/users/4604579/val

基本的に同じことですが、ここでは、各「名前」の最大の「サイズ」を見つけ、上位25か所を表示するために機能したものを示します。

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