DBAtlas · Atlas de operações de banco de dados

too_many_clauses: too_many_clauses: maxClauseCount is set to 1024 (query contains too many clauses)

Elasticsearch

O que significa?

Uma consulta excedeu o número máximo permitido de cláusulas Lucene. No ES 8.x esse limite não é fixo; ele é calculado automaticamente a partir do tamanho do heap do nó e do número de threads de busca (pode cair para 1024 em nós com heap pequeno), e a mensagem de erro mostra o valor atual. Consultas bool muito grandes e consultas que se expandem para muitos termos o disparam.

Por que acontece?

Consultas bool geradas programaticamente com milhares de cláusulas should/must; consultas wildcard/prefix/fuzzy/query_string que se expandem para muitos termos; estruturas bool profundamente aninhadas. Observação: a consulta terms (uma lista de valores em um único campo) não está sujeita a esse limite; seu teto é index.max_terms_count (padrão 65,536).

Como resolver

Simplifique a consulta: converta muitas cláusulas term em um único campo em uma consulta terms (ou um terms lookup para listas grandes). Use tipos de consulta mais específicos ou campos index_prefixes/keyword em vez de wildcard/prefix. No ES 8.x a configuração indices.query.bool.max_clause_count está obsoleta e é ignorada; a forma de elevar o limite é aumentar o heap do nó. Revise a lógica de geração das consultas.

Abrir no DBAtlas →

Mais entradas deste banco