如何在 Lucene 5.3.x 中使用 BooleanQuery 构建器?
How to use a BooleanQuery builder in Lucene 5.3.x?
我几乎是 lucene 的新手,正在尝试对一些查询进行 AND 运算并显示它们。
我搜索了整个网络,但找不到解决此问题的正确方法。布尔查询搜索的解决方案包括 BooleanQuery
Lucene class,但是这个 class 是 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
,因为此 class (IndexSearcher) 的 search
方法应由查询传递给!因此,当我尝试 运行 以下内容时,它给了我一个错误:
TopDocs hits = is.search(booleanQuery,10);
...
您的 booleanQuery
对象实际上是 BooleanQuery.Builder
的实例,而不是 BooleanQuery
。
将所有查询添加到构建器后,您需要调用 build
方法。
例如
TopDocs hits = is.search(booleanQuery.build(),10);
我几乎是 lucene 的新手,正在尝试对一些查询进行 AND 运算并显示它们。
我搜索了整个网络,但找不到解决此问题的正确方法。布尔查询搜索的解决方案包括 BooleanQuery
Lucene class,但是这个 class 是 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
,因为此 class (IndexSearcher) 的 search
方法应由查询传递给!因此,当我尝试 运行 以下内容时,它给了我一个错误:
TopDocs hits = is.search(booleanQuery,10);
...
您的 booleanQuery
对象实际上是 BooleanQuery.Builder
的实例,而不是 BooleanQuery
。
将所有查询添加到构建器后,您需要调用 build
方法。
例如
TopDocs hits = is.search(booleanQuery.build(),10);