1

2 つのインデックスで集計を実行します: idx-2020-07-21、idx-2020-07-22 ターゲット:すべてのドキュメントを取得しますが、ID が重複している場合 (50%)、最新のインデックスから取得しますインデックス名を使用します。

これは私が実行しているクエリです

{
  "size": 0,
  "aggregations": {
    "latest_item": {
      "composite": {
        "size": 1000,
        "sources": [
          {
            "product": {
              "terms": {
                "field": "_id",
                "missing_bucket": false,
                "order": "asc"
              }
            }
          }
        ]
      },
      "aggregations": {
        "max_date": {
          "top_hits": {
            "from": 0,
            "size": 1,
            "version": false,
            "explain": false,
            "sort": [
              {
                "_index": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

各インデックスのサイズは 8G で、約 1M のドキュメントがあります。ES バージョン 7.5

集計には約8分かかります。ほとんどの場合、

{"error":{"root_cause":[{"type":"circuit_breaking_exception","reason":"[parent] Data too large, data for [<http_request>] would be [32933676058/30.6gb], which is larger than the limit of [32641751449/30.3gb].
  1. このクエリを記述するより良い方法はありますか?
  2. この例外にどのように対処すればよいですか?
  3. 10 分ごとに ES にクエリを実行する Java ジョブを実行しましたが、2 回目には頻繁に発生していることに気付きました。リソースなどを解放する必要はありますか? null になるまで次のキーで再度呼び出すリスナーで restHighLevelClient.searchAsync() を使用します。

クラスタには 3 つのノードがあり、それぞれ 32G です。

バケットサイズで遊んでみましたが、あまり役に立ちませんでした。

ありがとう!

4

0 に答える 0