当前位置:首页 > 科技  > 软件

深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

来源: 责编: 时间:2023-08-05 11:45:48 5514观看
导读在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期有同学反馈,function_score 的相关参数不好理

在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。OB328资讯网——每日最新资讯28at.com

function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。OB328资讯网——每日最新资讯28at.com

近期有同学反馈,function_score 的相关参数不好理解,本文将深入探讨 function_score 的核心参数和函数。OB328资讯网——每日最新资讯28at.com

图片图片OB328资讯网——每日最新资讯28at.com

1、function_score 函数的用途及适用场景

Elasticsearch 的 function_score 查询是一种强大的工具,它可以允许我们修改文档的基本的相关评分,让我们在特定的应用场景下获得更好的搜索结果。OB328资讯网——每日最新资讯28at.com

这个功能通过提供了一组内置函数(如 script_score, weight, random_score, field_value_factor, decay functions等),以及一系列参数(如boost_mode和score_mode等)来实现。OB328资讯网——每日最新资讯28at.com

以下是一些 function_score 可以应用的场景:OB328资讯网——每日最新资讯28at.com

1.1 用户偏好场景

如果需要了解用户的兴趣或者行为,我们可以使用 function_score 来提升用户可能感兴趣的结果。OB328资讯网——每日最新资讯28at.com

比如在推荐系统中,如果我们已知道用户喜欢某个作者的文章,可以提升这个作者的文章的得分。OB328资讯网——每日最新资讯28at.com

比如最近火热的“罗刹海市”就被网易云音乐推荐到最前面。OB328资讯网——每日最新资讯28at.com

图片图片OB328资讯网——每日最新资讯28at.com

1.2 随机抽样场景

如果我们需要从一个大的数据集中随机抽样,可以使用 random_score 函数。OB328资讯网——每日最新资讯28at.com

这个函数会给每个文档生成一个随机得分,从而让我们能够得到随机的搜索结果。OB328资讯网——每日最新资讯28at.com

1.3 时间敏感的查询场景

对于一些时间敏感的数据,比如新闻、博客文章或者论坛帖子,新的文档通常比旧的文档更相关。OB328资讯网——每日最新资讯28at.com

在这种情况下,我们可以使用 decay functions(衰减函数) 来降低旧的文档的得分。OB328资讯网——每日最新资讯28at.com

1.4 地理位置敏感的查询场景

如果我们的应用关心地理位置,比如房地产或者旅游相关的应用。OB328资讯网——每日最新资讯28at.com

可以使用 decay functions (衰减函数)来提升接近某个地理位置的文档的得分。OB328资讯网——每日最新资讯28at.com

1.5 特定字段影响场景

如果我们的文档有一些字段值可以影响相关度评分,可以使用 field_value_factor (字段值因子)函数。OB328资讯网——每日最新资讯28at.com

比如在电商场景,一个商品的销量、评分或者评论数量可能会影响搜索结果的排序。OB328资讯网——每日最新资讯28at.com

总的来说,function_score 提供了一种灵活的方式来满足各种复杂的相关度评分需求。OB328资讯网——每日最新资讯28at.com

2、function_score 参数介绍

2.1 boost_mode 参数

boost_mode 决定了如何将查询得分和函数得分进行组合。OB328资讯网——每日最新资讯28at.com

可接受的参数有:OB328资讯网——每日最新资讯28at.com

boost_modeOB328资讯网——每日最新资讯28at.com

描述OB328资讯网——每日最新资讯28at.com

multiplyOB328资讯网——每日最新资讯28at.com

查询得分和函数得分相乘(默认值)OB328资讯网——每日最新资讯28at.com

sumOB328资讯网——每日最新资讯28at.com

查询得分和函数得分相加OB328资讯网——每日最新资讯28at.com

avgOB328资讯网——每日最新资讯28at.com

查询得分和函数得分的平均值OB328资讯网——每日最新资讯28at.com

firstOB328资讯网——每日最新资讯28at.com

仅仅使用函数得分OB328资讯网——每日最新资讯28at.com

maxOB328资讯网——每日最新资讯28at.com

查询得分和函数得分中的最大值OB328资讯网——每日最新资讯28at.com

minOB328资讯网——每日最新资讯28at.com

查询得分和函数得分中的最小值OB328资讯网——每日最新资讯28at.com

replaceOB328资讯网——每日最新资讯28at.com

完全替换查询得分,只使用函数得分OB328资讯网——每日最新资讯28at.com

2.2 score_mode

score_mode 决定了如何处理多个函数的分数。OB328资讯网——每日最新资讯28at.com

可接受的参数有:OB328资讯网——每日最新资讯28at.com

score_modeOB328资讯网——每日最新资讯28at.com

描述OB328资讯网——每日最新资讯28at.com

multiplyOB328资讯网——每日最新资讯28at.com

各个函数得分相乘OB328资讯网——每日最新资讯28at.com

sumOB328资讯网——每日最新资讯28at.com

各个函数得分相加(默认值)OB328资讯网——每日最新资讯28at.com

avgOB328资讯网——每日最新资讯28at.com

各个函数得分的平均值OB328资讯网——每日最新资讯28at.com

firstOB328资讯网——每日最新资讯28at.com

仅仅使用第一个函数的得分OB328资讯网——每日最新资讯28at.com

maxOB328资讯网——每日最新资讯28at.com

各个函数得分中的最大值OB328资讯网——每日最新资讯28at.com

minOB328资讯网——每日最新资讯28at.com

各个函数得分中的最小值OB328资讯网——每日最新资讯28at.com

2.3 提供的函数

function_score 提供了多种函数类型来进行自定义评分:OB328资讯网——每日最新资讯28at.com

Score FunctionOB328资讯网——每日最新资讯28at.com

描述OB328资讯网——每日最新资讯28at.com

script_scoreOB328资讯网——每日最新资讯28at.com

用脚本计算得分OB328资讯网——每日最新资讯28at.com

weightOB328资讯网——每日最新资讯28at.com

简单地修改查询得分,不考虑字段值OB328资讯网——每日最新资讯28at.com

random_scoreOB328资讯网——每日最新资讯28at.com

生成随机得分OB328资讯网——每日最新资讯28at.com

field_value_factorOB328资讯网——每日最新资讯28at.com

使用字段值进行计算得分OB328资讯网——每日最新资讯28at.com

decay functionsOB328资讯网——每日最新资讯28at.com

衰减函数,根据字段值的距离计算得分,越近得分越高OB328资讯网——每日最新资讯28at.com

3、function_score 使用实战解读

3.1 构造数据

为了帮助大家更好地理解,我们将创建一个简单的索引,插入一些文档,并对它们执行 function_score 查询。OB328资讯网——每日最新资讯28at.com

假设我们有一个名为 articles 的索引,里面存储了一些博客文章的数据,包括作者(author),标题(title),内容(content),以及这篇文章的喜欢数量(likes)。OB328资讯网——每日最新资讯28at.com

首先,创建索引并添加一些文档:OB328资讯网——每日最新资讯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 }

现在我们有了一些文档,让我们对它们执行 function_score 查询。OB328资讯网——每日最新资讯28at.com

3.2 使用 script_score 函数实现基于 'likes' 字段的对数加权排序

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 查询。OB328资讯网——每日最新资讯28at.com

它首先对 "articles" 索引中的所有文档进行匹配(使用 match_all 查询),然后使用一个脚本函数(script_score),该脚本会计算每个文档的 "likes" 字段的自然对数值加一(Math.log(1 + doc['likes'].value)),然后把这个得分与原始查询得分相乘(由于 boost_mode 被设为了 "multiply"),最终的得分再乘以5(由于 boost 被设为了 "5")。这种查询用于根据 "likes" 字段对结果进行加权排序。OB328资讯网——每日最新资讯28at.com

执行结果如下:OB328资讯网——每日最新资讯28at.com

图片图片OB328资讯网——每日最新资讯28at.com

3.3 使用 random_score 生成基于 'likes' 字段的全随机结果查询

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

上述查询使用 Elasticsearch 的 function_score 查询,并配合使用 random_score 函数。random_score 函数根据 "likes" 字段的值生成一个随机分数。OB328资讯网——每日最新资讯28at.com

重要的是,由于没有提供一个固定的种子(seed),所以每次执行这个查询都会返回一个全新的随机排序结果。OB328资讯网——每日最新资讯28at.com

match_all 是基础查询,用来匹配所有文档。然后 random_score 函数基于 "likes" 字段值生成随机分数。OB328资讯网——每日最新资讯28at.com

boost_mode 设为 "replace" 表示忽略基础查询的分数,完全使用 random_score 函数的分数作为最终结果。所以,这个查询会在每次执行时都返回全新的随机排序结果。OB328资讯网——每日最新资讯28at.com

执行结果如下图所示:OB328资讯网——每日最新资讯28at.com

图片图片OB328资讯网——每日最新资讯28at.com

3.4 field_value_factor 函数根据某个字段的值来修改_score

这对于一些字段很有用,比如"likes":一篇有很多"likes"的文章可能比"likes"少的文章更相关。OB328资讯网——每日最新资讯28at.com

示例如下:OB328资讯网——每日最新资讯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"    }  }}

在这个查询中:OB328资讯网——每日最新资讯28at.com

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

表示基础查询是在 "content" 字段中匹配包含 "Elasticsearch" 的文章。OB328资讯网——每日最新资讯28at.com

  • field_value_factor

函数用来基于 "likes" 字段的值调整查询得分。它首先取 "likes" 字段的值,如果文档没有 "likes" 字段或者该字段的值为空,那么将使用 "missing" 参数指定的默认值1。然后,它将取得的值乘以 "factor" 参数指定的因子1.2。最后,它将结果进行 "modifier" 参数指定的平方根运算("sqrt")。OB328资讯网——每日最新资讯28at.com

  • boost_mode

参数设置为 "multiply",这表示将基础查询的得分和 field_value_factor 函数计算得出的得分相乘,以得到最终的文档得分。OB328资讯网——每日最新资讯28at.com

所以,这个查询会返回包含 "Elasticsearch" 的文章,并且文章的得分会根据 "likes" 字段的值进行调整,"likes" 值越高的文章,得分也会越高。OB328资讯网——每日最新资讯28at.com

执行结果如下:OB328资讯网——每日最新资讯28at.com

图片图片OB328资讯网——每日最新资讯28at.com

3.5 decay functions 根据某个字段的值的距离来调整_score。

如果值接近某个中心点,得分就会更高。这对于日期或地理位置字段特别有用。OB328资讯网——每日最新资讯28at.com

Elasticsearch 提供了三种衰减函数:线性(linear)、指数(exp)、和高斯(gauss)。OB328资讯网——每日最新资讯28at.com

以下是使用 gauss 函数的一个示例:OB328资讯网——每日最新资讯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"    }  }}

上述执行可概括为:使用 function_score 和 gauss 函数对含有 'Elasticsearch' 的文章进行基于 'likes' 字段的高斯衰减得分调整"。OB328资讯网——每日最新资讯28at.com

在这个查询中:OB328资讯网——每日最新资讯28at.com

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

表示基础查询是在 "content" 字段中匹配包含 "Elasticsearch" 的文章。OB328资讯网——每日最新资讯28at.com

  • gauss

函数则是用来对 "likes" 字段的值进行高斯衰减处理。OB328资讯网——每日最新资讯28at.com

其中,OB328资讯网——每日最新资讯28at.com

参数OB328资讯网——每日最新资讯28at.com

OB328资讯网——每日最新资讯28at.com

描述OB328资讯网——每日最新资讯28at.com

originOB328资讯网——每日最新资讯28at.com

100OB328资讯网——每日最新资讯28at.com

期望的中心点,即 "likes" 字段的最理想值OB328资讯网——每日最新资讯28at.com

scaleOB328资讯网——每日最新资讯28at.com

20OB328资讯网——每日最新资讯28at.com

表示衰减的速度,也就是距离 "origin" 值多远时,得分会衰减到原始得分的一半OB328资讯网——每日最新资讯28at.com

offsetOB328资讯网——每日最新资讯28at.com

0OB328资讯网——每日最新资讯28at.com

表示在距离 "origin" 多少的范围内不进行衰减OB328资讯网——每日最新资讯28at.com

decayOB328资讯网——每日最新资讯28at.com

0.5OB328资讯网——每日最新资讯28at.com

表示当距离超过了 "scale" 之后,得分会以多快的速度衰减,例如 0.5 表示超过 "scale" 距离后,得分会衰减到原始得分的一半OB328资讯网——每日最新资讯28at.com

  • boost_mode

参数设置为 "multiply",这表示将基础查询的得分和 gauss 函数计算得出的得分相乘,以得到最终的文档得分。OB328资讯网——每日最新资讯28at.com

所以,这个查询会返回包含 "Elasticsearch" 的文章,并且文章的得分会根据 "likes" 字段的值进行高斯衰减处理,"likes" 值越接近100的文章,得分也会越高。OB328资讯网——每日最新资讯28at.com

图片图片OB328资讯网——每日最新资讯28at.com

4、小结

在深入了解 Elasticsearch 的 function_score 后,我们可以明显感受到其在搜索应用中的强大作用。无论是基于特定字段值的排序,还是利用自定义脚本微调搜索结果,function_score 都能发挥其出色的性能。OB328资讯网——每日最新资讯28at.com

尽管 function_score 的参数和选项多样,初看可能会觉得复杂,但只需理解各参数的含义和作用,我们就能根据需求灵活运用。实际案例中,我们使用了 script_score、field_value_factor、random_score 和 decay functions 等函数,演示了如何通过 function_score 满足复杂的搜索需求。OB328资讯网——每日最新资讯28at.com

但是,我们也必须注意,在使用 function_score 时,要慎重考虑性能问题,因为复杂的函数和脚本可能占用大量计算资源。在实际应用中,我们应始终关注这一点,以维护良好的系统性能。OB328资讯网——每日最新资讯28at.com

此外,随着数据和用户行为的不断变化,我们需要持续观察、学习和调整搜索策略,以不断提升用户体验。在这个过程中,function_score 将是我们强有力的工具。OB328资讯网——每日最新资讯28at.com

总的来说,Elasticsearch 的 function_score 是一个强大而灵活的工具,只要我们深入了解并恰当使用,就能够挖掘其巨大的潜力,提升我们的搜索应用性能和用户体验。OB328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-132-0.html深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在线图片编辑器,支持PSD解析、AI抠图等

下一篇: 三万字盘点 Spring 九大核心基础功能

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
  • 机构称Q2全球智能手机出货量同比下滑11% 苹果份额依旧第2

    7月20日消息,据外媒报道,研究机构的报告显示,由于需求下滑,今年二季度全球智能手机的出货量,同比下滑了11%,三星、苹果等主要厂商的销量,较去年同期均有下
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
Top