2012-12-06 17 views
5

मैं अपनी खोज को कैसे ल्यूसीन ने खोजा है, इस बारे में बेहतर समझने की कोशिश कर रहा हूं ताकि मैं अपनी खोज कॉन्फ़िगरेशन या दस्तावेज़ सामग्री में आवश्यक बदलाव कर सकूं।सोलर/ल्यूसीन आईडीएफ स्कोर

नीचे स्कोर ब्रेकडाउन का एक हिस्सा है।

के उत्पाद:

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 

मैं समझता हूँ कि के रूप में मेरे विन्यास मूल्य

है लेकिन गणना (७.८८०१७४ = आईडीएफ मूल्य) कैसे आईडीएफ था बढ़ावा गणना करना सीखें।

Lucene के अनुसार, आईडीएफ सूत्र है: आईडीएफ (टी) = 1 + लॉग (numDocs/(docFreq + 1))

मैं कोर व्यवस्थापक कंसोल की और पाया कि मेरी docFreq = maxDocs = 47,667

लुसीन से सूत्र का उपयोग करके, मैं अपेक्षित 7.880174 की गणना करने में सक्षम नहीं था। इसके बजाय मुझे मिलता है: idf = 3.988 = 1 + लॉग (47667/(48 + 1))।

क्या मेरे सूत्र में कुछ ऐसा है जो मुझे याद आ रहा है।

उत्तर

6

मुझे लगता है कि अपने log कार्य ल्यूसीन में आधार के रूप में 10 का चयन करें हम आधार के रूप में चुनते हैं।

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

Lucene की idf विधि के स्रोत कोड है:

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

जैसा कि आप देख, idf उपयोग जावा Math.logidf जबकि Math.log चुनें रूप log समारोह की गणना करने के। विस्तार के लिए Java Math api देखें।

संबंधित मुद्दे