6

我在 Lucene 的Similaritypublic float idf(Term term, Searcher searcher)方法 javadoc 上找到了这个:

请注意,使用 Searcher.maxDoc() 代替 IndexReader#numDocs() 因为也使用了 Searcher.docFreq(Term),当后者不准确时,Searcher.maxDoc() 也是如此,并且方向相同。此外,Searcher.maxDoc() 的计算效率更高。

这对我来说不太合理。这与 IndexReader 中的文档删除有关吗?

4

1 回答 1

7

是的,完全正确。每当文档被删除(或更新,因为 Lucene 中的更新只是删除后添加)时,文档将保留在索引中,直到这些段被合并,通常通过索引优化。它不会被搜索返回,已被删除,但它的条款仍然会对 idf 评分产生影响。

LuceneFAQ 有一些与此相关的信息,特别是在这个答案的最后一段关于删除,以及这个解决 maxDoc

于 2013-05-31T15:29:25.987 回答