解析elasticsearch二次打分處理方案

2021-08-01 22:21:48 字數 2989 閱讀 1638

1、在建立索引的時候提高文件的權重,根據因素欄位值來給文件設定boost.這種方式在lucene5之前有效,之後就無效了。不建議採用。

2、通過function_query來設定分數。

如在相關度相差不大的情況下,投票的數量越多排名越往前。可以採用簡單的線性方式來處理:

get /blogposts/post/_search

},"field_value_factor": }}}

其中

field:表示影響權重的字段例子中是votes

modifier:表示影響的規則

修飾語 modifier 的值可以為:

none (預設狀態)

log 、 log1p 、 log2p 、 ln 、 ln1p 、 ln2p 、 square 、 sqrt 以及 reciprocal。

facror:表示影響因子。

通過上面設定後整個打分變為:

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

factor 值大於 1 會提公升效果, factor 值小於 1 會降低效果。

初次之外還可以設定boost_mode影響因子和old_source通過什麼運算來得出新分值。

get /blogposts/post/_search

},"field_value_factor": ,

"boost_mode": "sum" ,

"max_boost": 1.5 }}}

boost_mode

multiply

評分 _score

與函式值的積(預設)

sum評分 _score

與函式值的和

min評分 _score

與函式值間的較小值

max評分 _score

與函式值間的較大值

replace

函式值替代評分 _score

max_boost

設定最大的得分分值

無論 field_value_factor 函式的結果如何,最終結果都不會大於 1.5 

上線是一種線性的影響關係,有時會有範圍性質、分數變化緩慢的需求場景,此時在使用上面的方案未免為使分數變化的不太圓滑,es提供了三種衰減函式(decay functions)來計算分數,讓我們有能力在兩個滑動標準如:地點和**,時間等之間權衡。

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

origin:中心點 或字段可能的最佳值,落在原點 origin 上的文件評分 _score 為滿分 1.0 。

scale:衰減率,即乙個文件從原點origin下落時,評分_score 改變的速度.(例如,每 £10 歐元或每 100 公尺)

decay:從原點 origin 衰減到 scale 所得的評分 _score ,預設值為 0.5 。

offset:以原點 origin 為中心點,為其設定乙個非零的偏移量 offset 覆蓋乙個範圍,而不只是單個原點。在範圍 -offset <= origin <= +offset 內的所有評分 _score 都是 1.0 。

這三個函式的唯一區別就是它們衰減曲線的形狀,用圖來說明會更為直觀

圖 圖 33 「衰減函式曲線」 中所有曲線的原點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的值。

回到我們的例子:使用者希望租乙個離倫敦市中心近()且每晚不超過 £100 英鎊的度假屋,而且與距離相比,

我們的使用者對**更為敏感,這樣查詢可以寫成:

}},}

}],

"query":

},"score_mode": "multiply"}}

}

location 欄位以地理座標點 geo_point 對映。

price 欄位是數值。

price 語句是 location 語句權重的兩倍。

location 語句可以簡單理解為:

以倫敦市中作為原點 origin 。

所有距原點 origin 2km 範圍內的位置的評分是 1.0 。

距中心 5km ( offset + scale )的位置的評分是 0.5 。

weight 引數可以被用來調整每個語句的貢獻度,權重 weight 的預設值是 1.0 。這個值會先與每個句子的評分相乘,然後再通過 score_mode 的設定方式合併。

elasticsearch幾個概念解析

介紹下es的幾個概念 cluster 代表乙個集群,集群中有多個節點,其中有乙個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。es的乙個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何乙個節點的通訊和與整...

elasticsearch 文件資料解析(五)

乙個文件不僅僅包含它的資料 也包含元資料 有關文件的資訊,三個必須的元資料元素如下 index 乙個 索引 應該是因共同的特性被分組到一起的文件集合。例如,你可能儲存所有的產品在索引 products 中,而儲存所有銷售的交易到索引 sales 中。雖然也允許儲存不相關的資料到乙個索引中,但這通常看...

Elasticsearch原理解析與效能調優

類似於insert。例如索引乙個文件到乙個索引 倒排索引 預設每個屬性都會有乙個倒排索引,可以設定屬性不被索引,它只能被覆蓋,不能被修改 型別類似表,同一索引的不同型別,可以擁有不同的字段,但應該擁有大部分相似的字段。它可以包含大小寫,不能包含句號,不能以下劃線開頭,長度限制為256.id文件的id...