2012-12-06 17 views
5

Ich versuche ein besseres Verständnis dafür zu bekommen, wie Lucene meine Suche bewertet hat, damit ich meine Suchkonfiguration oder den Dokumentinhalt optimieren kann.solr/lucene IDF Punktzahl

Das Folgende ist ein Teil der Punktzahlaufschlüsselung.

Produkt von:

0.34472802 = queryWeight, product of: 
     2.2 = boost 
     7.880174 = idf(docFreq=48, maxDocs=47667) 
     0.019884655 = queryNorm 
     1.9700435 = fieldWeight in 14363, product of: 
     1.0 = tf(freq=1.0), with freq of: 
      1.0 = termFreq=1.0 
     7.880174 = idf(docFreq=48, maxDocs=47667) 
     0.25 = fieldNorm(doc=14363) 
0.26806915 = (MATCH) max of: 
    0.07832639 = (MATCH) weight(shortDescription:tires^1.1 in 14363) [DefaultSimilarity], result of: 
    0.07832639 = score(doc=14363,freq=1.0 = termFreq=1.0 

Ich verstehe, wie die Verstärkung berechnet wird, als dass mein Konfigurationswert ist

Aber wie berechnet idf wurde (7,880174 = idf-Wert).

Nach dem Lucene, die idf Formel: idf (t) = 1 + log (numDocs/(docFreq + 1))

ich den Kern Admin-Konsole überprüft und festgestellt, dass meine docFreq = maxdocs = 47667 .

Mit der Formel von Lucene konnte ich nicht erwartet 7.880174 berechnen. Stattdessen bekomme ich: idf = 3.988 = 1 + log (47667/(48 + 1)).

Gibt es etwas, das ich in meiner Formel vermisse?

Antwort

6

Ich denke, Ihre log Funktion wählen Sie 10 als Basis während in Lucene wählen wir e als Basis.

log(47667/(48+1), 10) = 2.9880217397306 
log(47667/(48+1), e) = 6.8801743154459 

Der Quellcode von idf Methode von Lucene ist:

public float idf(int docFreq, int numDocs) { 
    return (float)(Math.log(numDocs/(double)(docFreq+1)) + 1.0); 
    } 

Wie Sie sehen, idf Verwendung Java Math.logidf während Math.log wählen e als log Funktion zu berechnen. Siehe Java Math api für Details.