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个表达式限制,我无法用这种方式了。请建议我如何解决这个问题。
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个表达式限制,我无法用这种方式了。请建议我如何解决这个问题。
默认情况下,布尔查询中的最大子句数为1024。
您可以增加此限制。
虽然会有性能损失。或者您可以对文档中的值进行索引并搜索它们(lucene将对具有相同名称的不同字段执行OR操作)。
可以使用上BooleanQuery类的静态属性来更改限制:
BooleanQuery.MaxClauseCount = 99999;
欧米
默认情况下,查询中的所有条款都默认或运算:
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));
我没有使用lucene,而是使用弹性搜索,而不是在lucene之上。我会通过向我的对象/类型添加一个字段来处理这个问题。我会保持这个字段是最新的,它会是一个布尔值。如果ID是你提到的那个,那么它将包含一个“true”;如果它不是其中之一,则包含“false”。如果“按值计算”每个查询更改,那么您可能会遇到困难。 – 2013-02-10 06:01:25