DBAtlas · Атлас эксплуатации баз данных

too_many_clauses: too_many_clauses: maxClauseCount равен 1024 (в запросе слишком много условий)

Elasticsearch

Что это значит?

Запрос превысил максимально допустимое число предложений Lucene. В ES 8.x этот лимит не фиксирован; он рассчитывается автоматически исходя из размера heap узла и числа поисковых потоков (на узлах с малым heap может опускаться до 1024), а сообщение об ошибке показывает текущее значение. Его вызывают очень большие запросы bool и запросы, разворачивающиеся во множество терминов.

Почему возникает?

Программно сгенерированные запросы bool с тысячами предложений should/must; запросы wildcard/prefix/fuzzy/query_string, разворачивающиеся во множество терминов; глубоко вложенные структуры bool. Примечание: запрос terms (список значений по одному полю) не подпадает под этот лимит; для него ограничение — index.max_terms_count (по умолчанию 65,536).

Как исправить

Упростите запрос: преобразуйте множество предложений term по одному полю в один запрос terms (или terms lookup для больших списков). Используйте более специфичные типы запросов или поля index_prefixes/keyword вместо wildcard/prefix. В ES 8.x параметр indices.query.bool.max_clause_count устарел и игнорируется; повысить лимит можно, увеличив heap узла. Пересмотрите логику генерации запросов.

Открыть в DBAtlas →

Ещё по этой СУБД