我有两组搜索索引。TestIndex(用于我们的测试环境)和ProdIndex(用于PRODUCTION环境)。Lucene搜索查询:+date:[20090410184806 TO 20091007184806]对于测试索引工作正常,但对于生产索引则出现此错误消息。
“maxClauseCount已设定为1024”
如果我在执行搜索查询之前执行下面的代码行,则不会收到此错误。搜索器。搜索(myQuery,收集器);
我在这里遗漏了什么吗?为什么在测试索引中没有得到这个错误?两个索引的架构是相同的。它们只是在记录/数据的数量上有所不同。PROD索引的记录数量(大约1300)比测试一中的记录数量(大约950)要多。
5条答案
按热度按时间dgsult0t1#
添加此代码
ia2d9nvy2#
只要输入,
BooleanQuery.setMaxClauseCount( Integer.MAX_VALUE );
,就可以了。pxy2qtax3#
实际上,范围查询被转换为布尔查询,每个可能的值都有一个子句,并进行“或”运算。
例如,查询+price:[10 to 13]被转换为布尔查询
假设所有值10-13都存在于索引中。
我假设,您的1300个值都在您给定的范围内。因此,布尔查询有1300个子句,高于默认值1024。在测试索引中,由于只有950个值,因此没有达到1024的限制。
8ljdwjyq4#
我遇到了同样的问题,我的解决方案是捕获BooleanQuery.TooManyClauses并动态增加maxClauseCount。
这里有一些代码,类似于我在生产中的代码。
zzwlnbp85#
我在使用Sitecore Web内容管理系统运行C#代码时遇到了同样的问题。我使用了上面Randy的答案,但无法使用系统的获取和设置属性功能。相反,我检索了当前计数,将其递增,然后将其设置回原来的值。