lucene採用的是基於vsm(向量空間模型)的相似度演算法,
查詢向量(query vector)與搜尋出來的文件向量(document vector) 形成n個夾角,計算q 和d 之間的夾角,最小的 就是相 似
度最高的。
看下lucene的打分公式:
tf: 乙個term在乙個文件中出現的次數
idf:乙個term在多少個文件中出現過
t.getboost:lucene自有的權重配置,預設為1
norm:字段標準化。
在lucene中score簡單說是由 tf * idf * boost * norm 計算得出的。
**實現,必要時可以重寫**。在lucene的defaultsimilarity類
1:協調coord(q,d)
@override
public float coord(int overlap, int maxoverlap)
2:querynorm(q)查詢規範 (對排序沒有任何影響)
3:tf 單個文件詞頻函式圖:/** implemented as1/sqrt(sumofsquaredweights)
. */@override
public float querynorm(float sumofsquaredweights)
只在商品名稱中出現了1次。。他的tf =1
math.sqrt 取平方根 math.sqrt(9)=3.0
如果搜尋「筆記本」 ,在分類和商品名稱中都出現了 他的tf 就是1.414 (2次的平方根)
只在商品名稱中出現了1次。。他的tf =1
@override
public float tf(float freq)
4:idf(t) 乙個term在多少個文件中出現過
numdocs 總文件數 docfreq 在多少文件中出現過
如果搜尋「筆記本」 ,總文件有1000個 ,,出現100次。。那麼idf=2
如果出現10次 那麼其idf =3
idf 越高、在總文件數中 該詞出現的頻率越低
5:t.getboost() 權重
6:norm(t,d) 標準化
對term和文件的字段長度進行標準化計算 ,如果欄位的長度越長,那麼該值越低。
@override
public float lengthnorm(fieldinvertstate state)
電商體驗:
在電商搜尋中。一般基於vsm演算法推導出來的lucene演算法的tfidf會被忽視,應為這兩個值沒有用的。真正用到的是boost演算法和norm演算法。。主要作用還是boost演算法。還有
solr的乙個bf引數。。乙個函式計算值
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的評分機制基本能夠把最符合使用者需要...