如何在 Lucene 5.3.x 中使用 BooleanQuery 构建器?

Posted

技术标签:

【中文标题】如何在 Lucene 5.3.x 中使用 BooleanQuery 构建器?【英文标题】:How to use a BooleanQuery builder in Lucene 5.3.x? 【发布时间】:2016-01-31 02:32:00 【问题描述】:

我几乎是 lucene 的新手,并试图对一些查询进行 AND 并显示它们。 我已经用谷歌搜索了整个网络,但找不到解决这个问题的正确方法。布尔查询搜索的解决方案包括BooleanQueryLucene 类,但是这个类是deprecated in Lucene 5.3.1(我正在使用的那个)

这是我的代码的一部分:

public static void searchBooleanQuery(String indexDir, Query query1,
                                       Query query2, Query query3, Query query4) throws IOException 
    IndexReader rdr =  DirectoryReader.open(FSDirectory.open(Paths.get(indexDir)));
    IndexSearcher is = new IndexSearcher(rdr);
    BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
    booleanQuery.add(query1, BooleanClause.Occur.MUST);
    booleanQuery.add(query2, BooleanClause.Occur.MUST);
    booleanQuery.add(query3, BooleanClause.Occur.MUST);
    booleanQuery.add(query4, BooleanClause.Occur.MUST);

更新

问题: 我无法通过IndexSearcher 对象显示Boolean Query,因为此类(IndexSearcher)的search 方法应该由查询传递给!因此,当我尝试运行以下命令时,它给了我一个错误:

TopDocs hits = is.search(booleanQuery,10);
...

【问题讨论】:

您到底有什么问题?您添加到查询就好了。现在只需构建查询并将其与 IndexSearcher 一起使用。 我在更新中回答了。 @user1071777 【参考方案1】:

您的booleanQuery 对象实际上是BooleanQuery.Builder 的一个实例,而不是BooleanQuery

将所有查询添加到构建器后,您需要调用build 方法。

例如

TopDocs hits = is.search(booleanQuery.build(),10);

【讨论】:

以上是关于如何在 Lucene 5.3.x 中使用 BooleanQuery 构建器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在lucene 6.2.0中使用Synonymap

如何使用Lucene Luke在多个字段上测试搜索结果?

如何使用Term或QueryParser从Lucene索引中删除文档

如何在 Lucene 3.5.0 中提取文档术语向量

如何使用 Solr/Lucene 搜索值列表?

如何在graphdb lucene连接器中使用属性路径