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):使用自定义脚本来计算得分。
相关推荐
身如柳絮随风扬1 小时前
深度解析 Elasticsearch 搜索服务:核心原理、架构与优化实践
大数据·elasticsearch·架构
kft13142 小时前
AI 驱动测试 2.0:当测试智能体成为你的“超级 QA“
大数据·人工智能·elasticsearch
Elastic 中国社区官方博客7 小时前
在 Elastic 中使用 MCP 自动化用户旅程以进行合成监控
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·可用性测试
逸Y 仙X9 小时前
文章十六:ElasticSearch 使用enrich策略实现大宽表
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
Elasticsearch9 小时前
用于 JavaScript 和 TypeScript 的 ES|QL 查询构建器:流式、类型安全的查询构建
elasticsearch
Elasticsearch10 小时前
警报之后:重新思考我们如何调查金融犯罪
elasticsearch
Elasticsearch10 小时前
Elastic 和 Cursor 合作 加速 上下文工程 与 coding agents
elasticsearch
Volunteer Technology10 小时前
ES高级搜索功能
android·大数据·elasticsearch
Elastic 中国社区官方博客12 小时前
通过 Elastic MCP Server 将 Cursor 连接到生产日志
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索·mcp
花开花落为谁愁13 小时前
Git核心命令速查表
大数据·git·elasticsearch