如何对lucene查询搜索结果执行新的查询搜索

8ehkhllq  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(359)

我在lucene有个搜索查询

String searchVal = "+(narr:foo narr:bar)" + " +(narr:foo2 narr:bar2)" + " -(narr:foo3 narr:bar3)";
IndexReader reader = luceneUtils.getIndexReader();
IndexSearcher searcher = luceneUtils.getIndexSearcher();
Query query = new QueryParser("narr", new EnglishAnalyzer()).parse(searchVal);
TopDocs topDocs = searcher.search(query, reader.numDocs());

在上面的示例代码中, topDocs 变量保存lucene查询的结果集。
如何创建另一个lucene查询,只在从上一个查询检索到的文档中进行搜索。i、 如何执行查询 topDocs 而不是在所有索引文档上执行它?

xwmevbvl

xwmevbvl1#

一种非常简单的方法是将旧查询和新查询 Package 到 BooleanQuery 使用 Occur.FILTER 原来的那个。
这样地:

BooleanQuery.Builder qb = new BooleanQuery.Builder();
qb.add(query, Occur.MUST);
qb.add(new QueryParser("narr", new EnglishAnalyzer()).parse("new-query"), Occur.FILTER);
Query newQuery = qb.build();

如果您需要一次又一次地执行这个“查询精化”,事情会变得更复杂一些。但是,我不认为有一种方法可以在以前的结果集中进行搜索,您需要构造一个新的查询afaik。

相关问题