2013-02-10 67 views
1

SQL服务器可以查询使用IN运算符,如特定的ID:IN操作符lucene.net

ID in (2,23,122,44,22) 

我用的是相同的查询在另一个页面显示相关结果。我必须移动到lucene.net以提高显示速度,所以我需要替换上面使用的旧代码。我在谷歌上搜索了很多,但没有找到任何替代方案。

我试着在lucene.net组成布尔查询,如:

ID:1 OR ID:2 OR ID:3 

...但由于1024个表达式限制,我无法用这种方式了。请建议我如何解决这个问题。

+0

我没有使用lucene,而是使用弹性搜索,而不是在lucene之上。我会通过向我的对象/类型添加一个字段来处理这个问题。我会保持这个字段是最新的,它会是一个布尔值。如果ID是你提到的那个,那么它将包含一个“true”;如果它不是其中之一,则包含“false”。如果“按值计算”每个查询更改,那么您可能会遇到困难。 – 2013-02-10 06:01:25

回答

0

默认情况下,布尔查询中的最大子句数为1024。

您可以增加此限制。

虽然会有性能损失。或者您可以对文档中的值进行索引并搜索它们(lucene将对具有相同名称的不同字段执行OR操作)。

可以使用上BooleanQuery类的静态属性来更改限制:

BooleanQuery.MaxClauseCount = 99999; 

欧米

+0

嗨Omri,我该如何增加这个限制?请提供示例代码。 – Ravi 2013-02-11 10:42:34

+0

感谢您的帮助... – Ravi 2013-02-12 08:44:14

+0

请注意,这是不恰当的请人投票或接受你的答案。 – 2013-02-13 14:33:27

0

默认情况下,查询中的所有条款都默认或运算:

ID: 1 2 3 

这将返回带有ID 1,2和3的所有文档的列表。

您可以使用简写le查询,

var ids = new[] { "1", "2", "3" }; 
var query = new QueryParser(version, idProperty, analyzer).Parse(string.Join(" ", ids));