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



我在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查询,该查询只在从上一个查询中检索到的文档中进行搜索。即如何在topDocs上执行查询,而不是在所有索引文档上执行查询?

实现这一点的一种非常简单的方法是将新旧查询封装在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。

相关内容

  • 没有找到相关文章