你好我有这么一段代码
IndexSearcher iSearcher = new IndexSearcher(dir);
TopDocs docs = iSearcher.search(parsedQuery,filter, 9);
我总是得到 20 个 scoredocs。有人可以帮忙吗?
你好我有这么一段代码
IndexSearcher iSearcher = new IndexSearcher(dir);
TopDocs docs = iSearcher.search(parsedQuery,filter, 9);
我总是得到 20 个 scoredocs。有人可以帮忙吗?
1) 您是否总是准确地返回 20 个 ScoreDocs?由于您的搜索将结果限制为 9 个 ScoreDocs,我对“20 个 ScoreDocs”感到好奇。
2) 您是否验证过您的索引包含会导致超过 20 个 ScoreDocs 的 Lucene 术语?在更改索引策略以在执行任何其他测试之前使用 Luke 测试索引后,我发现它很有用。
谢谢您的回答。问题实际上出在构建路径中。它不能包含不存在的库并且无法构建项目。这就是为什么每次我尝试更改代码和调试它时,都会使用以前构建的版本。
抱歉误导。
仅仅因为 doc.scoreDocs.length == 20 并不意味着您收到了 20 个结果。您必须检查每个单独结果的 doc id 是否等于Integer.MAX_VALUE
,它用作“此处无结果”标记值。这一切的重点是 Lucene 的典型特征——最小化内存分配,在这种情况下通过重用已经分配的结果数组。