Elasticsearch 相關度控制

2021-10-08 12:03:22 字數 3847 閱讀 7921

}}資料匯入->資料匯入指引

自定義新增資料。

每個文件都有相關性評分,用乙個正浮點數字段_score來表示 。_score的評分越高,相關性越高。換句話說,就是_score越高,就離我們想要搜尋到的結果越相近。

elasticsearch 的相似度演算法被定義為檢索詞頻率/反向文件頻率, tf/idf ,包括以下內容:

通過explain為true可檢視分數是如何計算的。

}}查詢結果如下:

,"hits":,

"max_score"

:9.761058

,"hits":[

,"_explanation":,

,]},

,,,,

]}]}

]}}]

}}

_explanation.details欄位中說明了分數是如何計算的。score(freq=1.0), computed as boost * idf * tf from:說明分數是由 boost,idf,tf三個字段相乘得到的。boost2.2分,idf為5.9928923分,tf為0.7403511分,最後相乘為9.761058分。

在實際的搜尋過程中title欄位和content欄位的權重一定是不一樣的,就比如一篇作文,標題的權重一定比內容高。

可在^2,將權重放大2倍。

}}

​ 遇到複雜的情況時,簡單粗暴的權重翻倍就無法滿足我們的需求了。

可以通過function-score來進行更詳細的評分設定。

比如只按照點讚數進行打分呢?

##put

/blogposts/post/

1

##get

/blogposts/post/_search},

"field_value_factor":}

}}

​ 按照點讚來評分排序的話,看似是乙個很好的選擇,但是0個讚和1個讚對比是有很大區別的,但是100個讚和101個讚對比呢?顯得就沒有那麼大的區別了。

​ 所以可以通過modifier以平滑的方式來處理votes的值。換句話說,我們希望最開始的一些贊更重要,但是其重要性會隨著數字的增加而降低。

0 個讚與 1 個讚的區別應該比 10 個讚與 11 個讚的區別大很多。

點讚數打分演算法:

new_score = old_score * number_of_votes

平滑點讚演算法

請求如下:

##get

/blogposts/post/_search},

"field_value_factor":}

}}

​ 前面說modifier可以使得點讚的分數變得更加平滑,但是這個平滑的程度如何控制呢?看圖!

預設情況下分數計算方式:

new_score = old_score * log(1 + number_of_votes)

通過factor來調節幅度:

new_score = old_score * log(1 + factor * number_of_votes)

請求方式

##get

/blogposts/post/_search},

"field_value_factor":}

}}

​ 點讚評分先告一段落,在大部分場景位置評分的權重相對會高一點,比如搜尋酒店,正常來說會搜尋附近的小於100塊錢一晚酒店。

function_score提供了一組衰減函式。讓我們有能力在兩個滑動標準,如地點和**,之間權衡。

有三種衰減函式——linearexpgauss(線性、指數和高斯函式),它們可以運算元值、時間以及經緯度地理座標點這樣的字段。所有三個函式都能接受以下引數:

​ 原點origin(即中心點)的值都是40offset5,也就是在範圍40 - 5 <= value <= 40 + 5內的所有值都會被當作原點origin處理——所有這些點的評分都是滿分1.0

​ 在此範圍之外,評分開始衰減,衰減率由scale值(此例中的值為5)和 衰減值decay(此例中為預設值0.5)共同決定。結果是所有三個曲線在origin +/- (offset + scale)處的評分都是0.5,即點3050處。

linearexpgauss(線性、指數和高斯)函式三者之間的區別在於範圍(origin +/- (offset + scale))之外的曲線形狀:

選擇曲線的依據完全由期望評分_score的衰減速率來決定,即距原點origin的值。

如此的話搜尋酒店大概可這樣請求:

#get

/_search

,"offset"

:"2km"

,"scale"

:"3km"}}

},},

"weight":2

}]}}

}

參考文件:官方文件

ElasticSearch相關概念

節點 node 物理概念,乙個執行的elasticearch例項,一般是一台機器上的乙個程序。分片 shard 為了支援更大量的資料,索引一般會按某個維度分成多個部分,每個部分就是乙個分片,分片被節點 node 管理。乙個節點 node 一般會管理多個分片,這些分片可能是屬於同乙份索引,也有可能屬於...

elasticsearch相關筆記

elasticsearch kibana nginx將原索引的資料reindex到新索引 post reindex dest 刪除原索引 delete vehicle info將新索引資料再次reindex回舊索引 post reindex dest 刪除新索引 然後在後台 bulk資料時,加上新的...

elasticsearch 優化相關

es寫入過程關鍵步驟 資料寫入index buffer緩衝和translog日誌檔案。index buffer indices.memory.index buffer size 大小預設是heap的10 最小值為48m。每隔一秒鐘 index.refresh interval index buffe...