简单的问题描述:
Lucene 索引每个文档有两个字段:ID 和 NAME。
我想使用 Lucene Query 接口(interface)进行查询,以便我可以找到 ID 为 1 OR 2 OR 3 OR 的所有文档,依此类推。要搜索的 ID 将在一个列表中,并且可能包含多达 30 个元素。
如果我使用查询解析器,我会做类似的事情
ID:(1 OR 2 OR 3)
但是应用程序已经大量使用查询接口(interface),我想遵循当前的模式。我能想到使用 Query 接口(interface)执行此操作的唯一方法是创建 n 个术语查询并使用 bool 查询对它们进行分组,如下所示
BooleanQuery booleanQuery = new BooleanQuery();
(String searchId : lstIds)
{
booleanQuery.add(new TermQuery(new Term("ID", searchId)), BooleanClause.Occur.SHOULD);
}
但是有没有更好/更有效的方法来做到这一点?
最佳答案
将查询与 BooleanQuery
组合在一起是重现 ID:(1 OR 2 OR 3)
等查询的正确方法。查询解析器将生成一个类似于您为该语法提供的 BooleanQuery,因此您在这里做的绝对是正确的。
如果您在实践中确实满足您的需求,您也许可以使用 PrefixQuery
、NumericRangeQuery
或 TermRangeQuery
来简化问题,但是您已经在做的事情并没有错。
关于search - 如何使用 Lucene Query 界面搜索值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485320/