如何解决如何对 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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。