DBAtlas · Atlas d'exploitation des bases de données

too_many_clauses: too_many_clauses: maxClauseCount is set to 1024 (query contains too many clauses) (la requête contient trop de clauses)

Elasticsearch

Que signifie cette erreur ?

Une requête a dépassé le nombre maximal autorisé de clauses Lucene. En ES 8.x, cette limite n'est pas fixe ; elle est calculée automatiquement à partir de la taille du heap du nœud et du nombre de threads de recherche (elle peut descendre à 1024 sur les nœuds à petit heap), et le message d'erreur indique la valeur actuelle. Les très grandes requêtes bool et les requêtes qui s'étendent à de nombreux termes la déclenchent.

Cause

Requêtes bool générées par programme avec des milliers de clauses should/must ; requêtes wildcard/prefix/fuzzy/query_string s'étendant à de nombreux termes ; structures bool profondément imbriquées. Remarque : la requête terms (une liste de valeurs sur un seul champ) n'est pas soumise à cette limite ; son plafond est index.max_terms_count (65,536 par défaut).

Comment la corriger

Simplifiez la requête : convertissez de nombreuses clauses term sur un même champ en une seule requête terms (ou un terms lookup pour les grandes listes). Utilisez des types de requêtes plus spécifiques ou des champs index_prefixes/keyword au lieu de wildcard/prefix. En ES 8.x, le paramètre indices.query.bool.max_clause_count est déprécié et ignoré ; le moyen de relever la limite est d'augmenter le heap du nœud. Revoyez la logique de génération des requêtes.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur