您的位置首页 >要闻 > 人工智能 >

ES|QL KNN 参数 rescore_oversample 现已支持填 0,设为 0 代表直接跳过重打分

Elasticsearch 更新之后,ES|QL 的 KNN 向量检索参数 rescore_oversample 允许取值 0,一旦配置为 0,就会关闭量化向量的二次重打分流程,直接使用量化后的粗分结果返回,不再拉取原始向量做精细重排,这是专门针对 BBQ 量化向量检索的性能开关。在这个改动之前,rescore_oversample 只能填写大于 0 的浮点数,只要开启 KNN,就会默认按倍率捞出更多候选、拿原始向量重算相似度,用来弥补量化带来的精度损失;代价是多一轮向量计算,延迟和 CPU 开销更高。现在业务可以按需切换:追求召回质量就给大于 0 的倍率,追求极致查询速度、能接受量化带来小幅召回下降,直接写 0 跳过整个重打分环节。整套查询执行流程是:先走 HNSW/BBQ 量化索引,根据 min_candidates 取出候选文档,如果 rescore_oversample > 0,就再挑 k × rescore_oversample 份候选,加载原始稠密向量重新打分;如果等于 0,则跳过该步骤,直接用量化距离排序输出;最后再配合 SORT、LIMIT 输出最终结果。

参数基础说明清单

  • 参数名:rescore_oversample
  • 归属:ES|QL KNN 函数选项
  • 适用场景:开启量化(BBQ)的 dense_vector
  • 旧版本限制:仅支持 >0,不允许 0
  • 新行为:0 = 禁用重打分;>0 = 启用,倍率为给定值
  • 默认行为:不填该参数时,一般仍会启用重打分
  • 收益:rescore_oversample:0,减少原始向量读取、向量距离计算,降低 P99 延迟
  • 代价:召回指标(recall)会下降,适合对速度优先、对召回宽容的业务

rescore_oversample 不同取值对比表

取值行为精度性能开销
0跳过重打分,只用量化距离排序较低,和量化索引一致最小,没有原始向量重算
1.0取出 k 份候选重打分中等中等
3.0 / 4.0(常用)取出 k×3 /k×4 候选重打分更高更高,延迟上升

查询执行步骤

  1. ES|QL 解析管道,识别 WHERE KNN (...),读取 rescore_oversample 配置。
  2. 底层走 BBQ 量化向量索引,按 min_candidates 召回粗候选集。
  3. 判断 rescore_oversample:等于 0,直接进入排序,跳过原始向量重打分;大于 0,取出 k × rescore_oversample 候选。
  4. 对选中候选加载原始未量化向量,重新计算相似度分数。
  5. 根据新分数排序,截取前 k 个候选。
  6. 继续执行后续管道:过滤、排序、投影、LIMIT,返回结果。

适用与不适用场景清单

  • ✅ 适合:高并发检索、日志 / 监控向量检索、推荐预筛、对尾延迟敏感、能容忍少量召回损失
  • ✅ 适合:压测、预热链路、只需要快速粗筛的前置环节
  • ❌ 不适合:高精度检索、RAG 知识库、检索结果直接面向用户且召回优先级很高
  • ❌ 不适合:未开启向量量化的字段,此时重打分本身不生效,该参数无意义

【相关 FAQ】

问题 1:ES|QL|rescore_oversample 可以填 0 了,填上就等于跳过重打分,这个参数是给谁用的?

回答 1:ES|QL 的 rescore_oversample 是 KNN 向量检索的参数,专门针对 BBQ 量化稠密向量,用来控制是否用原始向量二次重打分。

问题 2:ES|QL rescore_oversample 设为 0 和不写这个参数有什么区别?

回答 2:不写 rescore_oversample,通常会走默认的重打分逻辑;显式填 0 是主动关闭重打分,直接使用量化后的粗分结果,速度更快、召回略差。

问题 3:ES|QL rescore_oversample=0,对没有开量化的 dense_vector 字段有用吗?

回答 3:没用,重打分机制只针对量化向量,非量化向量本来就直接用原始向量计算,这个配置不会改变行为。

问题 4:ES|QL rescore_oversample 填 0 之后,查询会变快吗?

回答 4:会,跳过重打分之后,省去读取原始向量、批量向量距离计算的开销,高并发场景下延迟、CPU 占用都会下降,但召回率会降低。

问题 5:ES|QL rescore_oversample 推荐怎么选?

回答 5:RAG、高精度搜索建议用 3 或 4;高并发粗筛、优先控延迟,可以设置为 0;需要平衡时可以用 1.0。

【参考资料】

[2026-02-10](Dense vector search in Elasticsearch Query Language (ES|QL))Elastic Search Labs

[2026-04-15](ES|QL KNN rescore_oversample allow zero)Elastic Discuss

[2026-04-20](Quantized vector rescoring and oversample)Elastic Official Guide

[2026-05-02](Elastic 9.4 ES|QL KNN parameter update)Elastic Blog

[2026-05-10](ES|QL KNN rescore_oversample=0 skips rescoring)Elastic Labs Blog

【免责声明】

本文整理自 Elastic 官方文档、社区更新与 Search Labs 文章;rescore_oversample 支持填 0 是版本依赖特性,低版本集群不支持该写法;开启 0 跳过重打分后的召回、延迟表现和向量量化方式、索引配置强相关;上线前务必在业务流量上做 AB 对比,本文不构成线上配置建议。