iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
Elastic Stack on Cloud

Python&Elasticsearch 入門系列 第 17

IT鐵人第17天 Elasticsearch 使用python查詢資料 function_score

  • 分享至 

  • xImage
  •  

上一篇講到了文檔在搜尋時是如何計算得分,在進行ES全文搜索時,搜索的結果會預設“_score”(文檔得分)字段的降序,當我們想用其他字段進行升序或降序可以使用sort來幫我們達成。
當簡單的sort沒有辦法滿足我們的需求時,就輪到function_score登場了,function_score可以自定義調整文檔的得分(相關度)

function_score

function_score有以下可調參數:

query

搜尋文檔的條件,就是前幾篇教的ES query,不指定的話預設

{
    "query": {
        "match_all": {}
    }
}

functions

列表,調整得分的使用的方式跟規則

{
    "functions": [
        調整條件1,
        調整條件2,
        ...
    ]
}

boost_mode

決定old score和加強score如何合併,合併方式有以下幾種:
1.multiply(預設): new score = old score * 加強score
2.sum: new score = old score + 加強score
3.min: new score = min(old score, 加強score)
4.max: new score = max(old score, 加強score)
5.replace: new score = 加強score

score_mode

決定functions裡面的加強score們怎麼合併,會先把functions裡的加強score合併成一個總加強score在跟old score合併
1.multiply(預設)
2.sum: 加總
3.first: 使用首個函數的結果作為最終結果
4.max: 取最大值
5.min: 去最小值
6.avg: 取平均值

max_boost

限制加強score的最大值
加強score = min(加強score, max_boost)

function_score有以下調整得分的方式:

weight

new score = old score * weight

field_value_factor

指定一個字段乘上原score

new score = old score * 指定字段的數值

random_score

對每個用戶都使用一個不同的隨機評分對結果排序,但對某一用戶來說,看到的隨機順序始終是一致的

衰減函數 (linear、exp、guass)

以某個字段設定一個值為基準,文檔字段的值距離基準越近得分越高
・linear:線性函數是條直線,一旦直線與橫軸 0 相交,所有其他值的評分都是 0
・exp:指數函數是先劇烈衰減然後變緩
・guass:高斯函數則是鐘形的,他的衰減速率是先緩慢,然後變快,最後又放緩

圖片來源:https://kucw.github.io/blog/2018/7/elasticsearch-function_score-gauss/

script_score

自定義腳本控制評分,但通常效率取決於使用者,所以如果可以話建議使用ES所提供的控制評分方法

今天就先到這邊,下一篇就來實際操作上面的function_score吧!


上一篇
IT鐵人第16天 Elasticseach 使用python查詢資料 文檔分數 score
下一篇
IT鐵人第18天 Elasticsearch 使用python查詢資料 function_score 範例(1)
系列文
Python&Elasticsearch 入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言