4

抱歉标题含糊。这是我的问题。我正在使用以下代码从 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搜索结果的数量?

谢谢你..

4

1 回答 1

4

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

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

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

TopDocs results = searcher.search(query, 10);
于 2013-03-22T12:36:13.747 回答