SQL 服务器可以使用 IN 运算符查询特定 ID,例如:
ID in (2,23,122,44,22)
我使用相同的查询在另一个页面中显示相关结果。我必须转移到 lucene.net 以提高显示速度,所以我需要替换上面使用的旧代码。我在谷歌上搜索了很多,但没有找到任何替代方案。
我尝试在 lucene.net 中编写布尔查询,例如:
ID:1 OR ID:2 OR ID:3
...但由于 1024 表达式的限制,我也无法使用这种方式。请建议我该如何解决这个问题。
SQL 服务器可以使用 IN 运算符查询特定 ID,例如:
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;
暗里
默认情况下,查询中的所有术语默认为 ORed:
ID: 1 2 3
这将返回 ID 为 1、2 和 3 的所有文档的列表。
您可以使用一个简单的查询,
var ids = new[] { "1", "2", "3" };
var query = new QueryParser(version, idProperty, analyzer).Parse(string.Join(" ", ids));