当前位置: 首页 > article >正文

Elasticsearch的function_score与rescore的区别

文章目录

  • 前言
  • 一、function_score
  • 二、rescore
  • 三、区别对比
  • 总结


前言

在 Elasticsearch 中,function_score 和 rescore 都是对查询结果进行评分调整的机制,但它们的用途、作用范围和执行阶段有所不同。


一、function_score

rescore 是一个用于 查询后重新排序 的功能,主要对初始查询结果进行二次评分和排序。

特点

  • 执行阶段:在查询的评分阶段(query phase)执行,对每个匹配的文档重新计算评分。
  • 使用场景
    • 对于初步查询结果进行更精确的排序优化。
    • 结合更复杂的逻辑或模型(如使用 query_weight 和 rescore_query_weight)重新计算评分。
  • 主要功能
    • 支持多种函数(weight, field_value_factor, gauss, linear, exp 等)。
    • 可以将查询的评分和函数的结果组合(例如乘法、加法等)。
    • 影响的是所有匹配文档的最终评分。

常见场景

  1. 根据某个字段的值提升文档排名(如评分越高排名越靠前)。
  2. 根据地理位置距离进行动态调整。
  3. 根据文档的时间戳实现时间衰减。

示例

{
  "query": {
    "function_score": {
      "query": { "match": { "title": "elasticsearch" } },
      "functions": [
        {
          "field_value_factor": {
            "field": "popularity",
            "factor": 1.2,
            "modifier": "sqrt"
          }
        },
        {
          "gauss": {
            "publish_date": {
              "origin": "2025-01-01",
              "scale": "10d"
            }
          }
        }
      ],
      "boost_mode": "sum"
    }
  }
}


  • 作用
    • 基于文档的 popularity 字段调整评分。
    • 根据文档发布时间计算时间衰减。

二、rescore

rescore 是一个用于 查询后重新排序 的功能,主要对初始查询结果进行二次评分和排序。

特点

  • 执行阶段:在查询的结果集返回前,对前 N 个(通常是 top-k)匹配的文档重新评分。
  • 使用场景
    • 对于初步查询结果进行更精确的排序优化。
    • 结合更复杂的逻辑或模型(如使用 query_weight 和 rescore_query_weight)重新计算评分。
  • 主要功能
    • 只对初步查询结果的前 N 个文档进行二次评分(默认 window_size 为 10)。
    • 提高查询性能,因为它不需要对所有匹配文档重新评分。
  • 适合场景
    • 使用简单的查询快速过滤大规模数据集,然后对前 N 个文档进行更精细的排序。
    • 将复杂计算放到重新排序阶段,而不是影响初步查询性能。

常见场景

  1. 使用 BM25 进行初筛,然后用其他模型(如短语匹配、词对匹配)对结果进行精细排序。
  2. 多阶段查询优化:先进行粗筛,再通过更复杂的逻辑排序。

示例

{
  "query": {
    "match": { "title": "elasticsearch" }
  },
  "rescore": {
    "window_size": 50,
    "query": {
      "rescore_query": {
        "match_phrase": { "title": "elasticsearch guide" }
      },
      "query_weight": 0.7,
      "rescore_query_weight": 2.0
    }
  }
}

  • 作用
    • 初筛阶段:通过 match 查询找到所有与 elasticsearch 匹配的文档。
    • 重排序阶段:对前 50 个文档用短语匹配(match_phrase)重新计算评分,并进行权重调整。

三、区别对比

特性function_scorerescore
执行阶段查询阶段:调整匹配文档的评分查询后排序阶段:对初筛结果重新评分
作用范围所有匹配文档查询结果的前 N 个文档(由 window_size 控制)
性能消耗对所有匹配文档评分,可能影响性能仅对部分文档评分,性能影响较小
适用场景动态评分调整(基于字段、位置、时间等)更复杂的逻辑排序或精细化模型排序
适用复杂度通常适用于简单到中等复杂度的评分逻辑适合复杂的评分逻辑,如精确短语匹配或外部模型
主要目的直接调整评分以提高结果的相关性精细化排序,提高结果的排序精度

总结

  • function_score 更适合在 查询阶段调整所有匹配文档的评分,用于基于字段或业务规则的动态评分调整。
  • rescore 更适合在 初步筛选后的精细排序,用于复杂的二次排序逻辑(例如短语匹配或基于机器学习的重新打分)。

选择哪一个取决于你的使用场景和性能需求:

  • 如果你需要动态调整所有文档的评分,使用 function_score。
  • 如果你只需要对初筛结果进行精细化排序,使用 rescore。

http://www.kler.cn/a/507317.html

相关文章:

  • 图数据库 | 18、高可用分布式设计(中)
  • MySQL(七)MySQL和Oracle、PostgreSQL的区别
  • 接口测试自动化实战(超详细的)
  • 卷积神经05-GAN对抗神经网络
  • thinkphp6 + redis实现大数据导出excel超时或内存溢出问题解决方案
  • QT 如何禁止QComboBox鼠标滚轮
  • npm 方式安装Pyodide 详解
  • 小模型干大事情,基于LLaMA-Factory+Lora入门级微调开源AI模型
  • Windows远程桌面网关出现重大漏洞
  • redisson 连接 redis5报错 ERR wrong number of arguments for ‘auth‘ command
  • Android Studio:Linux环境下安装与配置
  • Maven私服+统一切换项目版本
  • 自动驾驶3D目标检测综述(八)
  • WebSocket 实时聊天
  • 机器学习——逻辑回归
  • CFD 预测中的机器学习:在 Benchmark 应用程序上使用 Stochos
  • 使用Newtonsoft.Json插件,打包至Windows平台显示不支持
  • vite vue 动态导入图片
  • 常用的C库函数与头文件
  • laravel10.x 框架中间件实现原理
  • 使用 Tailwind CSS 的几点感触
  • 什么是基础镜像
  • 解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
  • 【Python通过UDP协议传输视频数据】(界面识别)
  • 基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)
  • 蓝桥杯算法|基础笔记(1)