如何看懂nutch搜尋結果中的評分詳解?

首先, nutch中的評分由Lucene的評分計算公式獲得,分值計算方式為查詢語句q中每個項t與文件d的匹配分值之和,當然還有權重的因素。

公式中的各項對應了評分詳解的內容:

lf(t in d) 項頻率因子——文件(d)中出現項(t)的頻率

lidf(t) 項在倒排文件中出現的頻率:它被用來衡量項的“唯一”性.出現頻率較高的term具有較低的idf,出現較少的term具有較高的idf

lboost(t.field in d) 域和文件的加權,在索引期間設定.你可以用該方法對某個域或文件進行靜態單獨加權

llengthNorm(t.field in d)域的歸一化(Normalization)值,表示域中包含的項數量.該值在索引期間計算,並儲存在索引norm中.對於該因子,更短的域(或更少的語彙單元)能獲得更大的加權

lcoord(q,d) 協調因子(Coordination factor),基於文件中包含查詢的項個數.該因子會對包含更多搜尋項的文件進行類似AND的加權

lqueryNorm(q)每個査詢的歸一化值,指毎個查詢項權重的平方和

下面對“用心”檢索結果的第一條資訊的評分進行解釋。

score for query:用心

0.02927261 = (MATCH) sum of:

o0.021942485 = (MATCH) weight(anchor:用心^2.0 in 373), product of:

§0.35618502 = queryWeight(anchor:用心^2.0), product of:

§2.0 = boost

§6.3082676 = idf(docFreq=1)

§0.028231604 = queryNorm

§0.061604176 = (MATCH) fieldWeight(anchor:用心in 373), product of:

§2.0 = tf(termFreq(anchor:用心)=4)

§6.3082676 = idf(docFreq=1)

§0.0048828125 = fieldNorm(field=anchor, doc=373)

o7.4737903E-4 = (MATCH) weight(content:用心in 373), product of:

§0.142725 = queryWeight(content:用心), product of:

§5.055505 = idf(docFreq=6)

§0.028231604 = queryNorm

§0.0052364967 = (MATCH) fieldWeight(content:用心in 373), product of:

§1.4142135 = tf(termFreq(content:用心)=2)

§5.055505 = idf(docFreq=6)

§7.324219E-4 = fieldNorm(field=content, doc=373)

o0.006582746 = (MATCH) weight(title:用心^1.5 in 373), product of:

§0.26713878 = queryWeight(title:用心^1.5), product of:

§1.5 = boost

§6.3082676 = idf(docFreq=1)

§0.028231604 = queryNorm

§0.02464167 = (MATCH) fieldWeight(title:用心in 373), product of:

§1.0 = tf(termFreq(title:用心)=1)

§6.3082676 = idf(docFreq=1)

§0.00390625 = fieldNorm(field=title, doc=373)

score for qurey中

第一行是總匹配分值——每個文件的域:anchor,title和content,最終匹配分值=查詢語句在域中的得分之和。0.02927261=0.021942485+7.4737903E-4 +0.006582746 ;

第二行項在域的匹配分值——“用心”在title中的匹配分值0.006582746是怎麼算出來的。t在field中的分值score = 查詢權重queryWeight * 域權重fieldWeight,即0.006582746=0.26713878*0.02464167。

第三行queryWeight——queryWeight的預設情況下boost=1.0,本次檢索為2.0,queryWeight = idf *queryNorm*boost,查詢權重queryWeight0.35618502=6.3082676*0.028231604*2。

第四行boost 是域和文件的加權,取值為2.0

第五行idf是項在倒排文件中出現的頻率—— docFreq是根據指定關鍵字進行檢索,檢索到的Document的數量,我們測試的docFreq=1;

第六行queryNorm——當預設的boost= 1.0情況下,sumOfSquaredWeights = idf * idf,idf分別來自 {用心} *{title, content}的組合。然後,就可以計算queryNorm的值了,計算如下所示:queryNorm = (float)(1.0 / Math.sqrt(sumOfSquaredWeights)

第七行fieldWeight——fieldWeight = tf * idf * fieldNorm

tf和idf的計算參考前面的,fieldNorm的計算在索引的時候確定了,此時直接從索引檔案中讀取,這個方法並沒有給出直接的計算。如果使用DefaultSimilarity的話,它實際上就是lengthNorm,域越長的話Norm越小。這個我就不再驗算了,每個域的Terms數量開方求倒數乘以該域的boost得出最終的結果。

相關問題答案