为什么Lucene使用maxDoc而不是numDocs来计算术语idf?

时间:2013-05-31 06:34:24

标签: java search lucene

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

  

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

这对我来说没有多大意义。这是否与IndexReader中的文档删除有关?

1 个答案:

答案 0 :(得分:6)

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

LuceneFAQ有一些与此相关的信息,特别是this answer on deletion的最后一段和this addressing maxDoc specifically