一 序
本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。
二 相關性和相關性算分
搜索的相關性算分,描述了一個文檔和查詢語句匹配的程度。ES 會對每個匹配查詢條件的結構進行算分_score
打分的本質是排序 , 需要把最符合用戶需求的文檔排在前面。ES 5 之前,默認的相關性打分採用 TF-IDF,現在採用 BM25
2.1 詞頻 TF
Term Frequency :檢查詞在一篇文檔裏出現的頻率
- 檢查詞出現的次數除以文檔的總字數
度量一條查詢和結果文檔縣管轄的建檔方法:簡單講搜索每一個詞的 TF 進行相加
- TF(區塊鏈) + TF(的)+ TF(應用)
Stop Word
- “的” 在文檔中出現了很多次,但是對貢獻相關度幾乎沒有用處,不應該考慮他們的 TF
2.2 逆文檔頻率 IDF
DF:檢索詞在所有文檔中出現的頻率
- “區塊鏈” 在相對比較少的文檔中出現
- “應用” 在相對比較多的文檔中出現
- “Stop Word” 在大量的文檔中出現
Inverse Document Frequency :簡單說 = log(全部文檔書 / 檢索詞出現過的文檔總數)
TF-IDF 本質上就是將 TF 求和變成了加權求和
- TF(區塊鏈)* IDF(區塊鏈) + TF(的)* IDF(的)+ TF(應用)* IDF(應用)
Lucene 中的 TF-IDF 評分公式
大致的瞭解,知道boosting對於算分的影響。
BM25
定製 Similarity
通過 Explain API 查看 TF-IDF
demo
數據準備,插入4條數據
PUT testscore/_bulk
{ "index": { "_id": 1 }}
{ "content":"we use Elasticsearch to power the search" }
{ "index": { "_id": 2 }}
{ "content":"we like elasticsearch" }
{ "index": { "_id": 3 }}
{ "content":"The scoring of documents is caculated by the scoring formula" }
{ "index": { "_id": 4 }}
{ "content":"you know, for search" }
查到2條,爲什麼2在1之前呢?
這兩個文檔的TF是一樣的,但是文檔2比文檔1短,影響算分高。
打開explain:,可以看到相關算分的計算
Boosting Relevance
Boosting 是控制相關度的一種手段
- 索引,字段或查詢子條件
參數 boost 的含義
- 當 boost > 1 時,打分的相關度相對性提高
- 當 0 < boost < 1 時,打分的權重相對性降低
- 當 boost < 0 時,貢獻度負分
小結:
總體來說,屬於瞭解原理性質。