DBAtlas · データベース運用アトラス

too_many_clauses: too_many_clauses: maxClauseCount is set to 1024 (query contains too many clauses)(クエリの句が多すぎる)

Elasticsearch

意味

クエリが許可された Lucene 句の最大数を超えた。ES 8.x ではこの上限は固定ではなく、ノードのヒープサイズと検索スレッド数から自動で算出され (ヒープの小さいノードでは 1024 まで下がることがある)、エラーメッセージに現在の値が示される。非常に大きな bool クエリや多数の語に展開されるクエリが原因となる。

原因

プログラムで生成された数千の should/must 句を持つ bool クエリ、多数の語に展開される wildcard/prefix/fuzzy/query_string クエリ、深くネストした bool 構造。注: terms クエリ (単一フィールドに対する値リスト) はこの上限の対象外であり、その上限は index.max_terms_count (デフォルト 65,536)。

対処方法

クエリを簡素化する: 単一フィールドに対する多数の term 句を 1 つの terms クエリ (大きなリストには terms lookup) にまとめる。wildcard/prefix の代わりに、より具体的なクエリタイプや index_prefixes/keyword フィールドを使う。ES 8.x では indices.query.bool.max_clause_count 設定は非推奨で無視される。上限を上げるにはノードのヒープを増やす。クエリの生成ロジックを見直す。

DBAtlas で開く →

同じデータベースの他の項目