我正在尝试在 lucene 中深度搜索我的资源。
Query q1 = new MultiFieldQueryParser(new String[] { "products",
"name"}, analyzer).parse(queryStr1);
Query q2 = new TermQuery(new Term("keywords", queryStr2));
IndexReader ir = DirectoryReader.open(indexLocation);
IndexSearcher is = new IndexSearcher(ir);
TopScoreDocCollector collector = TopScoreDocCollector.create(
reqHits, true);
is.search(q1, collector);
ScoreDoc results[] = collector.topDocs().scoreDocs;
TopDocs topDocs = null;
for (ScoreDoc scoreDoc : results) {
topDocs = is.searchAfter(scoreDoc, q2, 1);
}
ScoreDoc deepResults[] = topDocs.scoreDocs;
for (int i = 0; i < deepResults.length; i++) {
Document doc = is.doc(deepResults[i].doc);
System.out.println(doc.get("name"));
}
searchAfter() 可以应用于先前搜索的 ScoreDocs。但它需要 ScoreDoc 作为第一个参数,所以我循环以实现单独的 ScoreDoc。我不确定如何应用 afterSearch 来获得预期的结果,因为我的代码没有给出预期的结果。 提前致谢。
最佳答案
这是 searchAfter
的错误用法。这个想法是使用结果大小的上限进行一次搜索,然后使用 searchAfter
重复搜索,传递上一个结果中的 last ScoreDoc,这样你就得到了下一个“结果页面”。这就是 Lucene 支持无限结果集大小的方式。
关于java - lucene中的searchAfter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27399266/