AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

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

來(lái)源: 責(zé)編: 時(shí)間:2023-08-05 11:45:48 4547觀看
導(dǎo)讀在 Elasticsearch 中,function_score 可以讓我們?cè)诓樵兊耐瑫r(shí)對(duì)搜索結(jié)果進(jìn)行自定義評(píng)分。function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進(jìn)行設(shè)置。近期有同學(xué)反饋,function_score 的相關(guān)參數(shù)不好理

在 Elasticsearch 中,function_score 可以讓我們?cè)诓樵兊耐瑫r(shí)對(duì)搜索結(jié)果進(jìn)行自定義評(píng)分。mxb28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

Elasticsearch 的 function_score 查詢是一種強(qiáng)大的工具,它可以允許我們修改文檔的基本的相關(guān)評(píng)分,讓我們?cè)谔囟ǖ膽?yīng)用場(chǎng)景下獲得更好的搜索結(jié)果。mxb28資訊網(wǎng)——每日最新資訊28at.com

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

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

1.1 用戶偏好場(chǎng)景

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

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

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

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

1.2 隨機(jī)抽樣場(chǎng)景

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

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

1.3 時(shí)間敏感的查詢場(chǎng)景

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

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

1.4 地理位置敏感的查詢場(chǎng)景

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

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

1.5 特定字段影響場(chǎng)景

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

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

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

2、function_score 參數(shù)介紹

2.1 boost_mode 參數(shù)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2 score_mode

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.3 提供的函數(shù)

function_score 提供了多種函數(shù)類型來(lái)進(jìn)行自定義評(píng)分:mxb28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

首先,創(chuàng)建索引并添加一些文檔:mxb28資訊網(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)在我們有了一些文檔,讓我們對(duì)它們執(zhí)行 function_score 查詢。mxb28資訊網(wǎng)——每日最新資訊28at.com

3.2 使用 script_score 函數(shù)實(shí)現(xiàn)基于 'likes' 字段的對(duì)數(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 查詢。mxb28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

3.3 使用 random_score 生成基于 'likes' 字段的全隨機(jī)結(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" 字段的值生成一個(gè)隨機(jī)分?jǐn)?shù)。mxb28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

示例如下:mxb28資訊網(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"    }  }}

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

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

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

  • field_value_factor

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

  • boost_mode

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

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

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

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

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

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

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

以下是使用 gauss 函數(shù)的一個(gè)示例:mxb28資訊網(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ù)對(duì)含有 'Elasticsearch' 的文章進(jìn)行基于 'likes' 字段的高斯衰減得分調(diào)整"。mxb28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

  • gauss

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • boost_mode

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

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

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

4、小結(jié)

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

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

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

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

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

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

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

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
Top