抱歉标题模糊。这是我的问题。我正在使用以下代码从 lucene 搜索中检索结果

scoreDoc[] hits = results.scoreDocs;
int numTotalHits = results.totalHits;
for (int i = 0; i < numTotalHits; i++) {
    int docId = hits[i].doc;
    Document d = searcher.doc(docId);
    System.out.println(i+":File name is: "+d.get("filename"));
    System.out.println(i+":File content is: "+d.get("contents"));
}

现在这段代码有时会弹出一个异常,说明索引超出数组边界。
所以我使用了下面的代码,它不会导致任何异常
scoreDoc[] hits = results.scoreDocs;
int numTotalHits = results.totalHits;
for (int i = 0; i < numTotalHits-1; i++) {
    int docId = hits[i].doc;
    Document d = searcher.doc(docId);
    System.out.println(i+":File name is: "+d.get("filename"));
    System.out.println(i+":File content is: "+d.get("contents"));
}

这是否意味着 results.totalHits 返回 results.totalHits-2 搜索结果的数量?

谢谢你..

最佳答案

totalHits 是与您的查询匹配的文档总数,这通常与您从 lucene 返回的文档数量不同,后者是您在 hits 数组中获得的文档数量。

这是为什么?想想一个搜索引擎:你执行一个查询,一百万个文档匹配,但你只在一个页面中返回其中的 10 或 20 个。一百万将是您从 lucene 返回的 totalHits,但您只会向 lucene 询问前 10 或 20 个文档,这些文档将在 hits 数组中返回。

只有一种情况 totalHitshits.length 相同:当您的查询匹配的文档数量小于或等于您在执行查询时要求的文档数量时,在下面的示例中为 10:

TopDocs results = searcher.search(query, 10);

关于java - lucene 返回的结果是否比预期的少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15566349/

10-11 22:14
查看更多