理解Lucene的評分機制

3.3  理解Lucene的評分機制

爲了使讀者能夠對影響Lucene評分的各個因素有一個全面的認識,我們在這章就來討論一下這個複雜的主題。首先,我們來看一下圖3.1中的相似度評分公式。Lucene會爲由某一指定查詢匹配到的每個文檔d使用這個公式計算其相應的得分。

 

圖3.1  Lucene利用這個公式計算出匹配於某一查詢的文檔的評分

注:如果你對這個方程式或者這種數學計算思想的理解存在一定困難,可以跳過這個小節。Lucene的評分機制是相當拔尖非常優秀的,但完全理解Lucene的評分機制如何工作並不需要使用Lucene的各項功能。

通過這個評 分公式得到的只是原始的得分,但由Hits對象返回的關於某一文檔的評分卻不一定是其原始的得分。因爲,評分最高的文檔的得分如果超過了1.0,那麼接下 來的所有評分都會以這個評分爲標準進行計算,因此所有Hits對象的得分都只能小於或等於1.0。表3.5列出了在評分公式中的各個因子。

表3.5  評分公式中的因子

評分因子

   

tf(t in d)

文檔d中出現搜索項t頻率

idf(t)

搜索項t在倒排文檔中出現的頻率

boost(t.field in d)

域的加權因子(boost),它的值在索引過程中進行設置

lengthNorm(t.field in d)

域的標準化值(normalization value),即在某一域中所有項的個數。通常在索引時計算該值並將其存儲到索引中

coord(q, d)

協調因子(Coordination factor),該因子的值基於文檔中包含查詢的項的個數

queryNorm(q)

每個查詢的標準化值,指每個查詢項權重的平方和

在 公式中加入加權因子(boost factor),可使你有效地對某個查詢或某一域給評分帶來的影響施加控制。Lucene在索引時,顯式地通過boost(t.field in d)來設置某個域的加權因子。該加權因子的默認值爲1.0。在索引期間,也可以爲Document對象設置加權因子。它隱式地把該文檔中所有域的初始加權 因子都設置爲指定值。特定域的加權因子是初始加權因子的倍數,經過一定處理後才最終得出該域加權因子的值。在索引過程中,有可能多次將同一域添加到同一個 文檔中,在這種情況下,該域的加權因子就等於該域在這個文檔的所有加權因子之和。在2.3小節中我們就曾經討論過在索引時對某個域進行加權處理的問題。

在這個公式 中除了一些明確的因子外,其他一部分作爲查詢標準(queryNorm)的因子可以在每次查詢的基礎上計算出來。Query對象本身對匹配文檔的評分也會 產生一定的影響。加權處理某一Query對象僅在應用程序執行多重子句的查詢時比較有效;如果只搜索單個項,加權處理該項相當於同時對所有匹配該項的文檔 都進行了相同比例的加權。在多重子句的布爾查詢中,一些文檔可能只匹配其中的一個子句,使用不同的加權因子可以用來區分不同的查詢條件。Query對象加 權因子的值也默認爲1.0。

在這個評分 公式中,對絕大多數因子的控制都是通過Similarity實例來實現的。如果不另外指定,在默認的情況下Lucene會用 DefaultSimilarity來實現Similarity類。此外,DefaultSimilarity類還負責處理評分中更多的計算過程,例如, 項頻率(term frequency)因子就是實際頻率的平方根。因爲這是一本講述如何“實踐”的書籍所提到的,故深入研究這些核心運算過程已經超出了本書的範圍。實際 上,這些因子是極少需要改變的。如果你需要改變這些因子,請參考Similarity類的相關文檔,但同時必須對這些因子的作用有很好的理解,並清楚改變 它們後有可能帶來的結果。此外還要注意,索引過程中改變加權因子或使用了Similarity類的方法後,爲了同時協調所有的相關因子,應用程序需要對索 引進行重建。

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章