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].
- このクエリを記述するより良い方法はありますか?
- この例外にどのように対処すればよいですか?
- 10 分ごとに ES にクエリを実行する Java ジョブを実行しましたが、2 回目には頻繁に発生していることに気付きました。リソースなどを解放する必要はありますか? null になるまで次のキーで再度呼び出すリスナーで restHighLevelClient.searchAsync() を使用します。
クラスタには 3 つのノードがあり、それぞれ 32G です。
バケットサイズで遊んでみましたが、あまり役に立ちませんでした。
ありがとう!