java - lucene中的searchAfter

标签 java lucene full-text-search

我正在尝试在 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/

相关文章:

具有首选语言的 SQLite FTS4

java - 为什么我调用返回列表的方法时会打印一个空列表?

java - FileNotFound 除非获取带有重音 Java 的 URL 资源

java - 在我的计算器应用程序中使用运算符时出现 "NaN"错误

lucene - 如何修复损坏的lucene索引?

lucene - lucene模糊搜索是懒惰的吗?

java - OrientDB Lucene 索引非常慢

ruby - 我如何要求Tire仅在Elasticsearch得分高于1时返回

java - 无法使用 apache batik 将 SVG 文件转换为 PDF 文件

performance - 全文索引缓慢。寻找替代品