Elasticsearch高级搜索技术-自定义评分规则

目录

自定义评分规则

脚本得分 (Script Score)

函数得分 (Function Score)

示例详解

使用函数得分

原理详解

高斯衰减函数

得分模式 (Score Mode)

增强模式 (Boost Mode)

其他函数类型


自定义评分规则

脚本得分 (Script Score)

脚本得分允许你使用自定义的脚本来计算每个文档的得分。你可以编写一个 Painless 脚本(Elasticsearch 的默认脚本语言),根据文档中的字段值或其他条件来调整得分。

函数得分 (Function Score)

函数得分则提供了一种更结构化的方式来调整得分。它支持多种内置函数,如权重、衰减函数(高斯、线性、指数)、随机函数等。通过组合这些函数,可以实现复杂的评分逻辑。

示例详解

假设有一个图书库索引 library,其中包含书籍的信息,包括标题 (title) 和发布日期 (publish_date)。我们希望为那些发布日期较新的书籍增加权重。

使用函数得分
javascript 复制代码
GET /library/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "title": "love"
        }
      },
      "functions": [
        {
          "gauss": {
            "publish_date": {
              "origin": "now",
              "scale": "30d",
              "offset": "7d",
              "decay": 0.5
            }
          }
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "replace"
    }
  }
}

在这个例子中:

  • 查询部分 :使用 match 查询查找标题中包含"love"的书籍。
  • 函数部分 :使用 gauss 衰减函数来调整得分。
    • origin:衰减的中心点,这里设置为当前时间 now
    • scale:控制衰减的速度,这里是 30 天。
    • offset:将衰减曲线向后移动 7 天。
    • decay:当距离达到 scale 时,得分会衰减到初始值的 0.5 倍。
  • score_mode :多个函数得分的合并方式,这里设置为 multiply,即将各个函数得分相乘。
  • boost_mode :最终得分的处理方式,replace 表示用函数得分替换原始相关性得分。

原理详解

高斯衰减函数

高斯衰减函数是一种常用的平滑衰减方法。

得分模式 (Score Mode)
  • multiply:将所有函数得分与原始相关性得分相乘。
  • sum:将所有函数得分与原始相关性得分相加。
  • avg:取所有函数得分的平均值。
  • first:只使用第一个函数得分。
  • max:取所有函数得分的最大值。
  • min:取所有函数得分的最小值。
增强模式 (Boost Mode)
  • multiply:将函数得分与原始相关性得分相乘。
  • replace:用函数得分替换原始相关性得分。
  • sum:将函数得分与原始相关性得分相加。
  • avg:取函数得分与原始相关性得分的平均值。
  • max:取函数得分与原始相关性得分的最大值。
  • min:取函数得分与原始相关性得分的最小值。

其他函数类型

除了高斯衰减函数外,还有其他几种常见的函数类型:

  • 线性衰减 (Linear Decay):基于线性函数进行衰减。
  • 指数衰减 (Exponential Decay):基于指数函数进行衰减。
  • 权重 (Weight):为每个文档分配固定的权重。
  • 随机 (Random):为每个文档分配一个随机得分。
  • 脚本 (Script):使用自定义脚本来计算得分。
相关推荐
百思可瑞教育14 小时前
Git 对象存储:理解底层原理,实现高效排错与存储优化
大数据·git·elasticsearch·搜索引擎
陆小叁1 天前
基于Flink CDC实现联系人与标签数据实时同步至ES的实践
java·elasticsearch·flink
2501_930104042 天前
GitCode 疑难问题诊疗:全方位指南
大数据·elasticsearch·gitcode
健康平安的活着2 天前
es7.17.x es服务yellow状态的排查&查看节点,分片状态数量
大数据·elasticsearch·搜索引擎
Elasticsearch2 天前
Elastic 的托管 OTLP 端点:为 SRE 提供更简单、可扩展的 OpenTelemetry
elasticsearch
Yusei_05232 天前
迅速掌握Git通用指令
大数据·git·elasticsearch
水无痕simon3 天前
5 索引的操作
数据库·elasticsearch
Qlittleboy5 天前
tp5集成elasticsearch笔记
大数据·笔记·elasticsearch
Elasticsearch5 天前
Elasticsearch:使用 Gradio 来创建一个简单的 RAG 应用界面
elasticsearch
kong@react5 天前
spring boot配置es
spring boot·后端·elasticsearch