Lucene中布尔查询的限制是什么?

时间:2010-12-21 19:04:33

标签: lucene boolean

我需要在Lucene索引中查找具有两个基本标准的项目: 1.匹配一个名为'relation'的特定字符串 2.属于权利'授权组'的列表

权利组定义该组成员可以访问的项目子集,非常类似于授权角色。

Lucene索引中的所有文档都有“关系”字段,为简单起见,还有一个或多个“grant-group”字段。

因此,例如,用户可以搜索“foobar”,并且该用户可以是组a,b,c的成员。我们说,foobar有赠款组a,p,q,s

查询基本上是“匹配'foobar'AND(或OR b OR c)。

这应该根据Lucene文档工作。

我的问题是:你可以用布尔查询的第二部分走多远,即'AND'之后的部分?问的原因是:我即将进行一项小型可行性研究,部分要求是需要在“OR”条款中支持潜在的多个组。可能多达200或300组。

会有明显的性能下降吗?

感谢。

3 个答案:

答案 0 :(得分:3)

无论你做什么,都应该衡量。我想你可能应该对200-300组感到满意。我认为BooleanQuery中子句的默认限制是1024,但也可以更改。

如果您使用Solr,而不是直接使用Lucene,那么我建议将grant-group部分作为filterQuery,以便可以缓存它。

答案 1 :(得分:1)

从此overview of lucene performance

  

换句话说:对于标准析取(OR'd)查询,子句的数量并不会真正影响性能,除非有更多文档可能匹配。

正如Avi所说,你将达到1024条款的限制。

答案 2 :(得分:0)

我不确定你可以在OR中指定多少元素,也许你应该做一个简单的概念验证,看看它是如何工作的。

除此之外,如果您使用Solr,我不会改变原始查询以实现您的要求(它会影响匹配文档的评分),而宁愿使用'fq'参数(参见Filter Query):< / p>