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

标签 java lucene information-retrieval

我几乎是 lucene 的新手,正在尝试对一些查询进行 AND 运算并显示它们。 我搜索了整个网络,但找不到解决此问题的正确方法。 boolean 查询搜索的解决方案包括BooleanQuery Lucene类,但是这个类是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);
...

最佳答案

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

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

例如

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

关于java - 如何在 Lucene 5.3.x 中使用 BooleanQuery 构建器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439826/

相关文章:

java - 如何检查字符串是否包含数字?

java - 如何在网站上填写表格数据

java - 使用hibernate时的困境

javascript - 相当于 Lucene 的客户端 javascript

elasticsearch - 给包含所有查询词的文档更多的分数

java - 为什么 GWT 文件上传在服务器上不起作用?

regex - 关键字内的 Elasticsearch 通配符词

java - 打开 lucene 索引 : Map failed 时出错

java - 维基百科删除日志下载

c++ - C/C++ 中的文本索引库