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):使用自定义脚本来计算得分。
相关推荐
阿里云大数据AI技术9 小时前
阿里云 ES AI 引擎版:面向 Agent 场景,为亿级租户、千亿规模向量设计的搜索引擎
人工智能·elasticsearch·agent
阿里云大数据AI技术10 小时前
FalconSeek 技术解析:阿里云 Elasticsearch 云原生内核如何让查询性能飙升600%
人工智能·elasticsearch
Elastic 中国社区官方博客10 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
Elasticsearch12 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
elasticsearch
Elastic 中国社区官方博客13 小时前
如何使用 OpenTelemetry 对你的搜索 API 进行埋点,并使用 ES|QL 对其进行查询
大数据·功能测试·elasticsearch·搜索引擎·全文检索·可用性测试
菜地里的小菜鸟1 天前
logstash定时同步elasticsearch数据
elasticsearch·数据同步·logstash定时同步elastics
BerryS3N1 天前
Code Git 工作树:多分支开发的痛点与工作树的曙光
大数据·git·elasticsearch
Elasticsearch1 天前
Elastic 与 Deductive AI 携手合作,加速工程团队的 agent 式事件调查
elasticsearch
Elasticsearch2 天前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
elasticsearch
爱莉希雅&&&2 天前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat