日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

深度探索 Elasticsearch 8.X:function_score 參數(shù)解讀與實戰(zhàn)案例分析

來源: 責編: 時間:2023-08-05 11:45:48 4760觀看
導讀在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結(jié)果進行自定義評分。function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進行設(shè)置。近期有同學反饋,function_score 的相關(guān)參數(shù)不好理

在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結(jié)果進行自定義評分。RzP28資訊網(wǎng)——每日最新資訊28at.com

function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進行設(shè)置。RzP28資訊網(wǎng)——每日最新資訊28at.com

近期有同學反饋,function_score 的相關(guān)參數(shù)不好理解,本文將深入探討 function_score 的核心參數(shù)和函數(shù)。RzP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RzP28資訊網(wǎng)——每日最新資訊28at.com

1、function_score 函數(shù)的用途及適用場景

Elasticsearch 的 function_score 查詢是一種強大的工具,它可以允許我們修改文檔的基本的相關(guān)評分,讓我們在特定的應用場景下獲得更好的搜索結(jié)果。RzP28資訊網(wǎng)——每日最新資訊28at.com

這個功能通過提供了一組內(nèi)置函數(shù)(如 script_score, weight, random_score, field_value_factor, decay functions等),以及一系列參數(shù)(如boost_mode和score_mode等)來實現(xiàn)。RzP28資訊網(wǎng)——每日最新資訊28at.com

以下是一些 function_score 可以應用的場景:RzP28資訊網(wǎng)——每日最新資訊28at.com

1.1 用戶偏好場景

如果需要了解用戶的興趣或者行為,我們可以使用 function_score 來提升用戶可能感興趣的結(jié)果。RzP28資訊網(wǎng)——每日最新資訊28at.com

比如在推薦系統(tǒng)中,如果我們已知道用戶喜歡某個作者的文章,可以提升這個作者的文章的得分。RzP28資訊網(wǎng)——每日最新資訊28at.com

比如最近火熱的“羅剎海市”就被網(wǎng)易云音樂推薦到最前面。RzP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RzP28資訊網(wǎng)——每日最新資訊28at.com

1.2 隨機抽樣場景

如果我們需要從一個大的數(shù)據(jù)集中隨機抽樣,可以使用 random_score 函數(shù)。RzP28資訊網(wǎng)——每日最新資訊28at.com

這個函數(shù)會給每個文檔生成一個隨機得分,從而讓我們能夠得到隨機的搜索結(jié)果。RzP28資訊網(wǎng)——每日最新資訊28at.com

1.3 時間敏感的查詢場景

對于一些時間敏感的數(shù)據(jù),比如新聞、博客文章或者論壇帖子,新的文檔通常比舊的文檔更相關(guān)。RzP28資訊網(wǎng)——每日最新資訊28at.com

在這種情況下,我們可以使用 decay functions(衰減函數(shù)) 來降低舊的文檔的得分。RzP28資訊網(wǎng)——每日最新資訊28at.com

1.4 地理位置敏感的查詢場景

如果我們的應用關(guān)心地理位置,比如房地產(chǎn)或者旅游相關(guān)的應用。RzP28資訊網(wǎng)——每日最新資訊28at.com

可以使用 decay functions (衰減函數(shù))來提升接近某個地理位置的文檔的得分。RzP28資訊網(wǎng)——每日最新資訊28at.com

1.5 特定字段影響場景

如果我們的文檔有一些字段值可以影響相關(guān)度評分,可以使用 field_value_factor (字段值因子)函數(shù)。RzP28資訊網(wǎng)——每日最新資訊28at.com

比如在電商場景,一個商品的銷量、評分或者評論數(shù)量可能會影響搜索結(jié)果的排序。RzP28資訊網(wǎng)——每日最新資訊28at.com

總的來說,function_score 提供了一種靈活的方式來滿足各種復雜的相關(guān)度評分需求。RzP28資訊網(wǎng)——每日最新資訊28at.com

2、function_score 參數(shù)介紹

2.1 boost_mode 參數(shù)

boost_mode 決定了如何將查詢得分和函數(shù)得分進行組合。RzP28資訊網(wǎng)——每日最新資訊28at.com

可接受的參數(shù)有:RzP28資訊網(wǎng)——每日最新資訊28at.com

boost_modeRzP28資訊網(wǎng)——每日最新資訊28at.com

描述RzP28資訊網(wǎng)——每日最新資訊28at.com

multiplyRzP28資訊網(wǎng)——每日最新資訊28at.com

查詢得分和函數(shù)得分相乘(默認值)RzP28資訊網(wǎng)——每日最新資訊28at.com

sumRzP28資訊網(wǎng)——每日最新資訊28at.com

查詢得分和函數(shù)得分相加RzP28資訊網(wǎng)——每日最新資訊28at.com

avgRzP28資訊網(wǎng)——每日最新資訊28at.com

查詢得分和函數(shù)得分的平均值RzP28資訊網(wǎng)——每日最新資訊28at.com

firstRzP28資訊網(wǎng)——每日最新資訊28at.com

僅僅使用函數(shù)得分RzP28資訊網(wǎng)——每日最新資訊28at.com

maxRzP28資訊網(wǎng)——每日最新資訊28at.com

查詢得分和函數(shù)得分中的最大值RzP28資訊網(wǎng)——每日最新資訊28at.com

minRzP28資訊網(wǎng)——每日最新資訊28at.com

查詢得分和函數(shù)得分中的最小值RzP28資訊網(wǎng)——每日最新資訊28at.com

replaceRzP28資訊網(wǎng)——每日最新資訊28at.com

完全替換查詢得分,只使用函數(shù)得分RzP28資訊網(wǎng)——每日最新資訊28at.com

2.2 score_mode

score_mode 決定了如何處理多個函數(shù)的分數(shù)。RzP28資訊網(wǎng)——每日最新資訊28at.com

可接受的參數(shù)有:RzP28資訊網(wǎng)——每日最新資訊28at.com

score_modeRzP28資訊網(wǎng)——每日最新資訊28at.com

描述RzP28資訊網(wǎng)——每日最新資訊28at.com

multiplyRzP28資訊網(wǎng)——每日最新資訊28at.com

各個函數(shù)得分相乘RzP28資訊網(wǎng)——每日最新資訊28at.com

sumRzP28資訊網(wǎng)——每日最新資訊28at.com

各個函數(shù)得分相加(默認值)RzP28資訊網(wǎng)——每日最新資訊28at.com

avgRzP28資訊網(wǎng)——每日最新資訊28at.com

各個函數(shù)得分的平均值RzP28資訊網(wǎng)——每日最新資訊28at.com

firstRzP28資訊網(wǎng)——每日最新資訊28at.com

僅僅使用第一個函數(shù)的得分RzP28資訊網(wǎng)——每日最新資訊28at.com

maxRzP28資訊網(wǎng)——每日最新資訊28at.com

各個函數(shù)得分中的最大值RzP28資訊網(wǎng)——每日最新資訊28at.com

minRzP28資訊網(wǎng)——每日最新資訊28at.com

各個函數(shù)得分中的最小值RzP28資訊網(wǎng)——每日最新資訊28at.com

2.3 提供的函數(shù)

function_score 提供了多種函數(shù)類型來進行自定義評分:RzP28資訊網(wǎng)——每日最新資訊28at.com

Score FunctionRzP28資訊網(wǎng)——每日最新資訊28at.com

描述RzP28資訊網(wǎng)——每日最新資訊28at.com

script_scoreRzP28資訊網(wǎng)——每日最新資訊28at.com

用腳本計算得分RzP28資訊網(wǎng)——每日最新資訊28at.com

weightRzP28資訊網(wǎng)——每日最新資訊28at.com

簡單地修改查詢得分,不考慮字段值RzP28資訊網(wǎng)——每日最新資訊28at.com

random_scoreRzP28資訊網(wǎng)——每日最新資訊28at.com

生成隨機得分RzP28資訊網(wǎng)——每日最新資訊28at.com

field_value_factorRzP28資訊網(wǎng)——每日最新資訊28at.com

使用字段值進行計算得分RzP28資訊網(wǎng)——每日最新資訊28at.com

decay functionsRzP28資訊網(wǎng)——每日最新資訊28at.com

衰減函數(shù),根據(jù)字段值的距離計算得分,越近得分越高RzP28資訊網(wǎng)——每日最新資訊28at.com

3、function_score 使用實戰(zhàn)解讀

3.1 構(gòu)造數(shù)據(jù)

為了幫助大家更好地理解,我們將創(chuàng)建一個簡單的索引,插入一些文檔,并對它們執(zhí)行 function_score 查詢。RzP28資訊網(wǎng)——每日最新資訊28at.com

假設(shè)我們有一個名為 articles 的索引,里面存儲了一些博客文章的數(shù)據(jù),包括作者(author),標題(title),內(nèi)容(content),以及這篇文章的喜歡數(shù)量(likes)。RzP28資訊網(wǎng)——每日最新資訊28at.com

首先,創(chuàng)建索引并添加一些文檔:RzP28資訊網(wǎng)——每日最新資訊28at.com

PUT /articles{  "mappings": {    "properties": {      "title": { "type": "text" },      "author": { "type": "text" },      "content": { "type": "text" },      "likes": { "type": "integer" }    }  }}POST /_bulk{ "index" : { "_index" : "articles", "_id" : "1" } }{ "title": "Elasticsearch Basics", "author": "John Doe", "content": "This article introduces the basics of Elasticsearch.", "likes": 100 }{ "index" : { "_index" : "articles", "_id" : "2" } }{ "title": "Advanced Elasticsearch", "author": "Jane Doe", "content": "This article covers advanced topics in Elasticsearch.", "likes": 500 }{ "index" : { "_index" : "articles", "_id" : "3" } }{ "title": "Elasticsearch Function Score Query", "author": "John Doe", "content": "This article discusses the function_score query in Elasticsearch.", "likes": 250 }

現(xiàn)在我們有了一些文檔,讓我們對它們執(zhí)行 function_score 查詢。RzP28資訊網(wǎng)——每日最新資訊28at.com

3.2 使用 script_score 函數(shù)實現(xiàn)基于 'likes' 字段的對數(shù)加權(quán)排序

GET /articles/_search{  "query": {    "function_score": {      "query": {        "match_all": {}      },      "boost": "5",      "functions": [        {          "script_score": {            "script": {              "source": "Math.log(1 + doc['likes'].value)"            }          }        }      ],      "boost_mode": "multiply"    }  }}

上述查詢使用了 Elasticsearch 的 function_score 查詢。RzP28資訊網(wǎng)——每日最新資訊28at.com

它首先對 "articles" 索引中的所有文檔進行匹配(使用 match_all 查詢),然后使用一個腳本函數(shù)(script_score),該腳本會計算每個文檔的 "likes" 字段的自然對數(shù)值加一(Math.log(1 + doc['likes'].value)),然后把這個得分與原始查詢得分相乘(由于 boost_mode 被設(shè)為了 "multiply"),最終的得分再乘以5(由于 boost 被設(shè)為了 "5")。這種查詢用于根據(jù) "likes" 字段對結(jié)果進行加權(quán)排序。RzP28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行結(jié)果如下:RzP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RzP28資訊網(wǎng)——每日最新資訊28at.com

3.3 使用 random_score 生成基于 'likes' 字段的全隨機結(jié)果查詢

GET /articles/_search{  "query": {    "function_score": {      "query": {         "match_all": {}       },      "functions": [        {          "random_score": {            "field": "likes"          }        }      ],      "boost_mode": "replace"    }  }}

上述查詢使用 Elasticsearch 的 function_score 查詢,并配合使用 random_score 函數(shù)。random_score 函數(shù)根據(jù) "likes" 字段的值生成一個隨機分數(shù)。RzP28資訊網(wǎng)——每日最新資訊28at.com

重要的是,由于沒有提供一個固定的種子(seed),所以每次執(zhí)行這個查詢都會返回一個全新的隨機排序結(jié)果。RzP28資訊網(wǎng)——每日最新資訊28at.com

match_all 是基礎(chǔ)查詢,用來匹配所有文檔。然后 random_score 函數(shù)基于 "likes" 字段值生成隨機分數(shù)。RzP28資訊網(wǎng)——每日最新資訊28at.com

boost_mode 設(shè)為 "replace" 表示忽略基礎(chǔ)查詢的分數(shù),完全使用 random_score 函數(shù)的分數(shù)作為最終結(jié)果。所以,這個查詢會在每次執(zhí)行時都返回全新的隨機排序結(jié)果。RzP28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行結(jié)果如下圖所示:RzP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RzP28資訊網(wǎng)——每日最新資訊28at.com

3.4 field_value_factor 函數(shù)根據(jù)某個字段的值來修改_score

這對于一些字段很有用,比如"likes":一篇有很多"likes"的文章可能比"likes"少的文章更相關(guān)。RzP28資訊網(wǎng)——每日最新資訊28at.com

示例如下:RzP28資訊網(wǎng)——每日最新資訊28at.com

GET /articles/_search{  "query": {    "function_score": {      "query": {        "match": {          "content": "Elasticsearch"        }      },      "functions": [        {          "field_value_factor": {            "field": "likes",            "factor": 1.2,            "modifier": "sqrt",            "missing": 1          }        }      ],      "boost_mode": "multiply"    }  }}

在這個查詢中:RzP28資訊網(wǎng)——每日最新資訊28at.com

  • "match": { "content": "Elasticsearch" }

表示基礎(chǔ)查詢是在 "content" 字段中匹配包含 "Elasticsearch" 的文章。RzP28資訊網(wǎng)——每日最新資訊28at.com

  • field_value_factor

函數(shù)用來基于 "likes" 字段的值調(diào)整查詢得分。它首先取 "likes" 字段的值,如果文檔沒有 "likes" 字段或者該字段的值為空,那么將使用 "missing" 參數(shù)指定的默認值1。然后,它將取得的值乘以 "factor" 參數(shù)指定的因子1.2。最后,它將結(jié)果進行 "modifier" 參數(shù)指定的平方根運算("sqrt")。RzP28資訊網(wǎng)——每日最新資訊28at.com

  • boost_mode

參數(shù)設(shè)置為 "multiply",這表示將基礎(chǔ)查詢的得分和 field_value_factor 函數(shù)計算得出的得分相乘,以得到最終的文檔得分。RzP28資訊網(wǎng)——每日最新資訊28at.com

所以,這個查詢會返回包含 "Elasticsearch" 的文章,并且文章的得分會根據(jù) "likes" 字段的值進行調(diào)整,"likes" 值越高的文章,得分也會越高。RzP28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行結(jié)果如下:RzP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RzP28資訊網(wǎng)——每日最新資訊28at.com

3.5 decay functions 根據(jù)某個字段的值的距離來調(diào)整_score。

如果值接近某個中心點,得分就會更高。這對于日期或地理位置字段特別有用。RzP28資訊網(wǎng)——每日最新資訊28at.com

Elasticsearch 提供了三種衰減函數(shù):線性(linear)、指數(shù)(exp)、和高斯(gauss)。RzP28資訊網(wǎng)——每日最新資訊28at.com

以下是使用 gauss 函數(shù)的一個示例:RzP28資訊網(wǎng)——每日最新資訊28at.com

GET /articles/_search{  "query": {    "function_score": {      "query": {        "match": {          "content": "Elasticsearch"        }      },      "functions": [        {          "gauss": {            "likes": {              "origin": "100",              "scale": "20",              "offset": "0",              "decay": 0.5            }          }        }      ],      "boost_mode": "multiply"    }  }}

上述執(zhí)行可概括為:使用 function_score 和 gauss 函數(shù)對含有 'Elasticsearch' 的文章進行基于 'likes' 字段的高斯衰減得分調(diào)整"。RzP28資訊網(wǎng)——每日最新資訊28at.com

在這個查詢中:RzP28資訊網(wǎng)——每日最新資訊28at.com

  • "match": { "content": "Elasticsearch" }

表示基礎(chǔ)查詢是在 "content" 字段中匹配包含 "Elasticsearch" 的文章。RzP28資訊網(wǎng)——每日最新資訊28at.com

  • gauss

函數(shù)則是用來對 "likes" 字段的值進行高斯衰減處理。RzP28資訊網(wǎng)——每日最新資訊28at.com

其中,RzP28資訊網(wǎng)——每日最新資訊28at.com

參數(shù)RzP28資訊網(wǎng)——每日最新資訊28at.com

RzP28資訊網(wǎng)——每日最新資訊28at.com

描述RzP28資訊網(wǎng)——每日最新資訊28at.com

originRzP28資訊網(wǎng)——每日最新資訊28at.com

100RzP28資訊網(wǎng)——每日最新資訊28at.com

期望的中心點,即 "likes" 字段的最理想值RzP28資訊網(wǎng)——每日最新資訊28at.com

scaleRzP28資訊網(wǎng)——每日最新資訊28at.com

20RzP28資訊網(wǎng)——每日最新資訊28at.com

表示衰減的速度,也就是距離 "origin" 值多遠時,得分會衰減到原始得分的一半RzP28資訊網(wǎng)——每日最新資訊28at.com

offsetRzP28資訊網(wǎng)——每日最新資訊28at.com

0RzP28資訊網(wǎng)——每日最新資訊28at.com

表示在距離 "origin" 多少的范圍內(nèi)不進行衰減RzP28資訊網(wǎng)——每日最新資訊28at.com

decayRzP28資訊網(wǎng)——每日最新資訊28at.com

0.5RzP28資訊網(wǎng)——每日最新資訊28at.com

表示當距離超過了 "scale" 之后,得分會以多快的速度衰減,例如 0.5 表示超過 "scale" 距離后,得分會衰減到原始得分的一半RzP28資訊網(wǎng)——每日最新資訊28at.com

  • boost_mode

參數(shù)設(shè)置為 "multiply",這表示將基礎(chǔ)查詢的得分和 gauss 函數(shù)計算得出的得分相乘,以得到最終的文檔得分。RzP28資訊網(wǎng)——每日最新資訊28at.com

所以,這個查詢會返回包含 "Elasticsearch" 的文章,并且文章的得分會根據(jù) "likes" 字段的值進行高斯衰減處理,"likes" 值越接近100的文章,得分也會越高。RzP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RzP28資訊網(wǎng)——每日最新資訊28at.com

4、小結(jié)

在深入了解 Elasticsearch 的 function_score 后,我們可以明顯感受到其在搜索應用中的強大作用。無論是基于特定字段值的排序,還是利用自定義腳本微調(diào)搜索結(jié)果,function_score 都能發(fā)揮其出色的性能。RzP28資訊網(wǎng)——每日最新資訊28at.com

盡管 function_score 的參數(shù)和選項多樣,初看可能會覺得復雜,但只需理解各參數(shù)的含義和作用,我們就能根據(jù)需求靈活運用。實際案例中,我們使用了 script_score、field_value_factor、random_score 和 decay functions 等函數(shù),演示了如何通過 function_score 滿足復雜的搜索需求。RzP28資訊網(wǎng)——每日最新資訊28at.com

但是,我們也必須注意,在使用 function_score 時,要慎重考慮性能問題,因為復雜的函數(shù)和腳本可能占用大量計算資源。在實際應用中,我們應始終關(guān)注這一點,以維護良好的系統(tǒng)性能。RzP28資訊網(wǎng)——每日最新資訊28at.com

此外,隨著數(shù)據(jù)和用戶行為的不斷變化,我們需要持續(xù)觀察、學習和調(diào)整搜索策略,以不斷提升用戶體驗。在這個過程中,function_score 將是我們強有力的工具。RzP28資訊網(wǎng)——每日最新資訊28at.com

總的來說,Elasticsearch 的 function_score 是一個強大而靈活的工具,只要我們深入了解并恰當使用,就能夠挖掘其巨大的潛力,提升我們的搜索應用性能和用戶體驗。RzP28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-132-0.html深度探索 Elasticsearch 8.X:function_score 參數(shù)解讀與實戰(zhàn)案例分析

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 在線圖片編輯器,支持PSD解析、AI摳圖等

下一篇: 三萬字盤點 Spring 九大核心基礎(chǔ)功能

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 陇川县| 湘乡市| 礼泉县| 上思县| 乌恰县| 纳雍县| 岑溪市| 五常市| 琼中| 乌鲁木齐市| 沙河市| 刚察县| 资溪县| 崇礼县| 南召县| 澳门| 澎湖县| 辽源市| 若尔盖县| 磴口县| 长兴县| 渝中区| 临汾市| 即墨市| 濮阳市| 驻马店市| 乃东县| 凯里市| 鹰潭市| 淄博市| 南皮县| 顺义区| 萨迦县| 汤阴县| 轮台县| 长垣县| 高台县| 苍山县| 莎车县| 盱眙县| 宁明县|