为什么它们限制了Elasticsearch中布尔查询中子句的最大数目

时间:2018-08-13 10:21:13

标签: elasticsearch

我想知道为什么布尔查询中的最大子句限制为 1024 indices.query.bool.max_clause_count:1024

如果在布尔查询中使用一百万个词触发OR查询,还可以吗?

2 个答案:

答案 0 :(得分:2)

max_clause_count 设置并非特定于Elasticsearch。它是静态的Lucene设置,因此只能在配置文件中设置。

我认为设置此限制是为了保护您的搜索,通过传递巨大的查询可以轻松地使您的服务器进入DOS。通过提高限制,您可以了解后果并接受对性能的影响。

当您查看他们的discussions时,Lucene社区本身也似乎在争论正确的限制。在讨论中,他们甚至很乐意将允许的数字更改为 Integer.MAX_VALUE ,但是较大的数字也会影响性能。

这些查询可能会比较慢,但是这也取决于您拥有的数据类型。还要在过滤器缓存中配置驱逐文件。在我们的用例中,我们平均查询50,000个子句,但由于子句的性质非常密集,因此对性能的影响不大。

答案 1 :(得分:1)

indices.query.bool.max_clause_count 设置可防止带有许多搜索词的滥用查询。限制的存在是有原因的。如果有很多子句会导致大量查找和磁盘查找,从而降低搜索速度。

下面的链接可能会帮助您并进行更深入的说明

https://discuss.elastic.co/t/increase-query-performance-for-many-or-clauses/63425/3