luence評分機制

2021-10-08 17:38:25 字數 1346 閱讀 3602

coord(q,d) 評分因子,基於文件**現查詢項的個數。越多的查詢項在乙個文件中,說明文件的匹配程度越高。

querynorm(q)查詢的標準查詢

tf(t in d) 指項t在文件d**現的次數frequency。具體值為次數的開根號。

idf(t) 反轉文件頻率, 出現項t的文件數docfreq

t.getboost 查詢時候查詢項加權

norm(t,d) 長度相關的加權因子

這個評分因子的計算公式是:

public float coord(int overlap, int maxoverlap)

overlap: 文件中命中檢索的個數

maxoverlap: 檢索條件的個數

比如檢索"english book", 現在有乙個文件是"this is an chinese book"。

那麼,這個搜尋對應這個文件的overlap為1(因為匹配了book),而maxoverlap為2(因為檢索條件有兩個book和english)。

最後得到的這個搜尋對應這個文件的coord值為0.5。

這個因素對所有文件都是一樣的值,所以它不影響排序結果。比如如果我們希望所有文件的評分大一點,那麼我們就需要設定這個值。

public float querynorm(float sumofsquaredweights)

這個項是長度的加權因子,目的是為了將同樣匹配的文件,比較短的放比較前面。

比如兩個文件:

chinese

chinese book

我搜尋chinese的時候,第乙個文件會放比較前面。因為它更符合"完全匹配"。

norm(t,d) = doc.getboost()· lengthnorm· ∏ f.getboost()

public float lengthnorm(fieldinvertstate state)

這裡的doc.getboost表示文件的權重,f.getboost表示欄位的權重,如果這兩個都設定為1,那麼nor(t,d)就和lengthnorm一樣的值。

比如我現在有乙個文件:

chinese book
搜尋的詞語為chinese, 那麼numterms為2,lengthnorm的值為 1/sqrt(2) = 0.71428571428571。

但是非常遺憾,如果你使用explain去檢視es的時候,發現lengthnorm顯示的只有0.625。

這個官方給出的原因是精度問題,norm在儲存的時候會進行壓縮,查詢的時候進行解壓,而這個解壓是不可逆的,即decode(encode(0.714)) = 0.625。

Lucene評分機制

tfidfsimilarity類中定義了lucene評分的要素。重寫這些要素計算實現可以方便的修改lucene的打分機制。擴充套件閱讀 introduction to information retrieval,chapter 6 下面將從資訊檢索模型到具體 有效地 實現來描述lucene如何實現評...

Lucene(三)評分機制

每當搜尋到匹配文件時,該文件都會被賦予一定的分值,用以反映匹配程度。該分值會計算文件與查詢之間的相似程度嗎,更高的分值反映了更強的相似程度和匹配程度。評分因子 描述tf t in d 項頻率因子 文件 d 中出現項 t 的頻率 idf t 項在倒排檔案中出現的頻率 它被用來衡量項的 唯一 性。出現頻...

lucene 的評分機制

elasticsearch是基於lucene的,所以他的評分機制也是基於lucene的。評分就是我們搜尋的短語和索引中每篇文件的相關度打分。如果沒有干預評分演算法的時候,每次查詢,lucene會基於乙個評分演算法來計算所有文件和搜尋語句的相關評分。使用lucene的評分機制基本能夠把最符合使用者需要...