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 子句合并为一个 terms 查询(大型列表使用 terms lookup)。使用更具体的查询类型,或用 index_prefixes/keyword 字段代替 wildcard/prefix。在 ES 8.x 中 indices.query.bool.max_clause_count 设置已弃用并被忽略;提高该限制的方法是增大节点堆。检查查询生成逻辑。

在 DBAtlas 中打开 →

同一数据库的其他条目