search - 如何使用 Lucene Query 界面搜索值列表

标签 search lucene full-text-search

简单的问题描述:

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,因此您在这里做的绝对是正确的。

如果您在实践中确实满足您的需求,您也许可以使用 PrefixQueryNumericRangeQueryTermRangeQuery 来简化问题,但是您已经在做的事情并没有错。

关于search - 如何使用 Lucene Query 界面搜索值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485320/

相关文章:

mysql - 全文 MySQL 搜索 - 返回片段

Python 摩尔斯电码 : S. O.S

r - 在 R 库中搜索函数

java - 包含/(斜杠)的罗盘查询

google-app-engine - Google 应用引擎中的新全文搜索是 Multi-Tenancy 的吗?

ruby-on-rails - PostgreSQL 触发器在 UPDATE 而不是 INSERT 时触发

c++ - 通过搜索单词拼字游戏得分 c++

swift - Firestore 跨多个字段查询相同的值

java - Elasticsearch:从客户端获取用于索引给定字段的分析器

elasticsearch - 分析仪使用了错误的索引 Elasticsearch