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.mzph.cn/pingmian/67409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode——SSH连接不上的一种解决办法

一、完整报错: > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! > Someone could be eavesdropping on you right now (man-in-the

20.<Spring图书管理系统①(登录+添加图书)>

PS:关于接口定义 接口定义,通常由服务器提供方来定义。 1.路径:自己定义 2.参数:根据需求考虑,我们这个接口功能完成需要哪些信息。 3.返回结果:考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器

redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包&#xff0c;旨在简化与 Redis 的交互&#xff0c;包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖&#xff1a; <…

Vue2+OpenLayers实现点位拖拽功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、初始化变量 3.2、创建一个点 3.3、将点添加到地图上 3.4、实现点位拖拽 3.5、完整代码 四、Gitee源码 一、案例截图 可以随意拖拽点位到你想要的位置 二、安装OpenLayers库 npm install ol 三、代码实现…

计算机网络 (46)简单网络管理协议SNMP

前言 简单网络管理协议&#xff08;SNMP&#xff0c;Simple Network Management Protocol&#xff09;是一种用于在计算机网络中管理网络节点的标准协议。 一、概述 SNMP是基于TCP/IP五层协议中的应用层协议&#xff0c;它使网络管理员能够管理网络效能&#xff0c;发现并解决网…

掌握C语言内存布局:数据存储的智慧之旅

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 引言正文一、数据类型介绍1.内置类型2.自定义…

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载 1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载 1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 逆向工程 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址&#xff1a;https://www.m…

BertTokenizerFast 和 BertTokenizer 的区别

BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具&#xff0c;主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现&#xff1a; BertTokenizer: 这是一个使用纯 Python 实现的标记器&#xff…

dockerhub上一些镜像

K8s下网络排障工具 https://hub.docker.com/r/nicolaka/netshoot ex kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash # 主机的net ns下运行 kubectl run tmp-shell --rm -i --tty --overrides{"spec": {"hostNetwork": tru…

C语言结构体漫谈:从平凡中见不平凡

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

用行动回应“实体清单”,智谱发布了一系列新模型

1月15日晚间&#xff0c;美国商务部工业和安全局&#xff08;BIS&#xff09;修订了《出口管制条例》&#xff08;EAR&#xff09;&#xff0c;以安全为由在实体清单中分两批增加了25个中国实体。 其中就包括智谱及其子公司&#xff0c;也是国内首家被美国列入实体清单的大模型…

vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建

1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…

深度学习图像算法中的网络架构:Backbone、Neck 和 Head 详解

深度学习已经成为图像识别领域的核心技术&#xff0c;特别是在目标检测、图像分割等任务中&#xff0c;深度神经网络的应用取得了显著进展。在这些任务的网络架构中&#xff0c;通常可以分为三个主要部分&#xff1a;Backbone、Neck 和 Head。这些部分在整个网络中扮演着至关重…

iOS - 内存对齐

1. 基本的内存对齐 // 对象内存对齐 struct objc_object {// isa 指针 8 字节对齐isa_t isa __attribute__((aligned(8))); };// 定义对齐常量 #define WORD_MASK 7UL // 字对齐掩码 #define WORD_SHIFT 3UL // 字对齐位移 #define WORD_SIZE 8 …

信安大赛单机取证

22年国赛单机取证 Evidence4 先搜索Evidence 找到一个 Evidence4nsOh2.pngf5b9ce3e485314c23c40a89d994b2dc8 Evidence2 之后再一个个找 这个是压缩包格式的 导出来 伪加密 修复一下 Evidence2ZQOo2.jpg9e69763ec7dac69e2c5b07a5955a5868 Evidence3 png的文件 改个宽高 E…

jmeter事务控制器-勾选Generate Parent Sample

1、打开jmeter工具&#xff0c;添加线程组&#xff0c;添加逻辑控制器-事务控制器 2、在事务控制器&#xff0c;勾选Generate parent sample&#xff1a;生成父样本&#xff1b;说明勾选后&#xff0c;事务控制器会作为父节点&#xff0c;其下面的请求作为子节点 3、执行&#…

AOF日志:宕机了Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的&#xff1f;三种写回策略日志文件太大了怎么办&#xff1f;AOF 重写会阻塞吗?小结每课一问 更多redis相关知识 如果有人问你&#xff1a;“你会把 Redis 用在什么业务场景下&#xff1f;”我想你大概率会说&#xff1a;“我会把它当作缓存使用&…

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…

react 与 vue 的比较,以及如何选择?

区别 Vue 和 React 都是流行的前端 JavaScript 框架&#xff0c;用于构建用户界面和单页应用&#xff08;SPA&#xff09;&#xff0c;但它们在设计理念、API 设计、生态系统等方面存在一些区别&#xff1a; 核心理念 Vue&#xff1a; 渐进式框架&#xff1a;Vue 被设计为一…

Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)

Flutter插件在开发Flutter项目的过程中扮演着重要的角色&#xff0c;我们从 ​​​​​​https://pub.dev 上下载添加到项目中的第三方库都是以包或者插件的形式引入到代码中的&#xff0c;这些第三方工具极大的提高了开发效率。 深入的了解插件的制作、发布、工作原理和缓存机…