1

トップ ヒット集計の最初の要素が所有するプロパティに基づいて、用語集計からバケットを並べ替えたいと思います。

私のベスト エフォート クエリは次のようになります (構文エラーがあります)。

{
    "aggregations": {
        "toBeOrdered": {
            "terms": {
                "field": "parent_uuid",
                "size": 1000000,
                "order": {
                    "topAnswer._source.id": "asc"
                }
            },
            "aggregations": {
                "topAnswer": {
                    "top_hits": {
                        "size": 1
                    }
                }
            }
        }
    }
}

これを達成する方法を知っている人はいますか?

例:

{
  "a":1,
  "b":2,
  "id":4
}
{
  "a":1,
  "b":3,
  "id":1
}
{
  "a":2,
  "b":4,
  "id":3
}

「a」でグループ化し、「id」(desc) でバケットを並べ替え、「b」(desc) でトップ ヒットを並べ替えると、次のようになります。

{2:{
  "a":2,
  "b":4,
  "id":3
},1:{
  "a":1,
  "b":3,
  "id":1
}}
4

1 に答える 1

1

次のクエリでそれを行うことができます。アイデアは、各parent_uuidバケットについて最小値を持つ最初の上位ヒットを表示し、サブ集計を使用して最小値に従ってバケットidをソートすることです。parent_uuididmin

{
  "aggregations": {
    "toBeOrdered": {
      "terms": {
        "field": "parent_uuid",
        "size": 1000000,
        "order": {
          "topSort": "desc"
        }
      },
      "aggregations": {
        "topAnswer": {
          "top_hits": {
            "size": 1,
            "sort": {
              "b": "desc"
            }
          }
        },
        "topSort": {
          "max": {
            "field": "id"
          }
        }
      }
    }
  }
}

試してみて、これがうまくいくかどうかを報告してください。

于 2015-10-24T03:46:36.747 に答える