2013-05-31 16 views
5

Znalazłem to na Lucene za Similarity klasy public float idf(Term term, Searcher searcher) metoda javadoc:Dlaczego Lucene używa maxDoc zamiast numDocs do obliczenia terminu idf?

Uwaga że Searcher.maxDoc() jest używana zamiast IndexReader # numDocs() dlatego też Searcher.docFreq (Term) jest używany, oraz gdy ostatnie jest niedokładne, tak samo jak Searcher.maxDoc() i jest w tym samym kierunku. W dodatku , funkcja Searcher.maxDoc() jest bardziej wydajna do obliczenia.

To nie ma dla mnie większego sensu. Czy ma to coś wspólnego z usuwaniem dokumentów w IndexReader?

Odpowiedz

5

Tak, dokładnie dobrze. Ilekroć dokument jest usuwany (lub aktualizowany, ponieważ aktualizacja w Lucene to po prostu usunięcie, a następnie dodanie), dokument pozostaje w indeksie do momentu scalenia tych segmentów, często przez optymalizację indeksu. Nie zostanie on zwrócony przez wyszukiwania, ponieważ został usunięty, ale jego warunki nadal będą miały wpływ na punktowanie idf.

LuceneFAQ ma pewne informacje związane z tym, szczególnie w ostatnim akapicie this answer on deletion i this addressing maxDoc specifically

+0

Wydaje się, że odpowiedziałeś sporo z moich pytań. Dziękuję Ci :-) – Denzel

Powiązane problemy