2013-05-31 41 views
5

我發現這對Lucene的Similaritypublic float idf(Term term, Searcher searcher)方法的javadoc:爲什麼Lucene使用maxDoc而不是numDocs來計算term idf?

注意Searcher.maxDoc()是用來代替的IndexReader#numDocs() 因爲還Searcher.docFreq(期限)時,當後者是 不準確,所以是Searcher.maxDoc(),並在相同的方向。在 另外,Searcher.maxDoc()計算效率更高。

這對我來說不太合理。這是否與索引讀取器中的文檔刪除有關?

回答

5

是的,完全正確。每當文檔被刪除(或更新時,由於Lucene中的更新只是一個刪除後跟一個添加),文檔將保留在索引中,直到這些段合併爲止,通常是通過索引優化。它不會被搜索結果返回,而是被刪除,但它的條款仍會對idf評分產生影響。

的LuceneFAQ具有與此有關,特別是在this answer on deletion末段的一些信息,並this addressing maxDoc specifically

+0

看來你已經回答了不少我的問題。謝謝 :-) – Denzel

相關問題