向量数据库实战:选型、调优与落地~系列文章13:混合搜索实战:向量检索 + BM25 关键词,准确率提升 30% 的秘诀
混合搜索实战向量检索 BM25 关键词准确率提升 30% 的秘诀 本文是《向量数据库实战选型、调优与落地》专栏第 13 篇⏱️阅读时间约 13 分钟 开篇纯向量搜索的盲区你有没有遇到过这种情况——用户搜索“Milvus 2.4 版本的新特性”向量搜索返回了一堆关于数据库版本升级的通用内容但就是没有那条精确包含 “Milvus 2.4” 的文档 为什么因为向量搜索擅长语义匹配但对精确关键词不敏感┌─────────────────────────────────────────────────────────┐ │ 两种搜索的互补关系 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 向量搜索语义匹配: │ │ ✅ 怎么退货 → 商品退回流程 │ │ ❌ Milvus 2.4 → 可能返回 Milvus 2.3 的内容 │ │ │ │ BM25 关键词搜索: │ │ ✅ Milvus 2.4 → 精确匹配包含这个词的文档 │ │ ❌ 怎么退货 → 匹配不到 商品退回流程 │ │ │ │ 混合搜索 向量 BM25 → 两者互补 │ │ ✅ 怎么退货 → 向量匹配到 商品退回流程 │ │ ✅ Milvus 2.4 → BM25 精确匹配 │ │ │ └─────────────────────────────────────────────────────────┘ 混合搜索的原理RRFReciprocal Rank Fusion融合算法最常用的融合方式——RRF核心思想很简单RRF 分数 Σ 1/(k rank_i) 其中 - rank_i 在第 i 个搜索系统中的排名 - k 常数通常取 60 示例 文档 A向量搜索排名第 1BM25 排名第 5 → RRF 1/(601) 1/(605) 0.0164 0.0154 0.0318 文档 B向量搜索排名第 3BM25 排名第 2 → RRF 1/(603) 1/(602) 0.0159 0.0161 0.0320 → 文档 B 的 RRF 分数更高最终排名更靠前融合流程┌─────────────────────────────────────────────────────────┐ │ 混合搜索流程 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 用户查询: Milvus 2.4 新特性 │ │ │ │ │ ├──────────────────┐ │ │ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ │ │ │ 向量搜索 │ │ BM25搜索 │ │ │ │ │ │ │ │ │ │ 结果: │ │ 结果: │ │ │ │ 1.文档C │ │ 1.文档A │ │ │ │ 2.文档A │ │ 2.文档B │ │ │ │ 3.文档B │ │ 3.文档D │ │ │ │ 4.文档D │ │ 4.文档C │ │ │ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ └────────┬───────┘ │ │ ▼ │ │ ┌──────────────┐ │ │ │ RRF 融合 │ │ │ │ │ │ │ │ 最终排名: │ │ │ │ 1.文档A (综合)│ │ │ │ 2.文档C (综合)│ │ │ │ 3.文档B (综合)│ │ │ │ 4.文档D (综合)│ │ │ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ 代码实战Milvus 混合搜索frompymilvusimportCollection,AnnSearchRequest,RRFRanker collectionCollection(knowledge_base)collection.load()# 1. 向量搜索请求vector_reqAnnSearchRequest(data[query_embedding],anns_fieldembedding,param{metric_type:COSINE,params:{ef:128}},limit20)# 2. BM25 关键词搜索请求Milvus 2.5 支持全文检索keyword_reqAnnSearchRequest(data[query_text],anns_fieldtext_sparse,# 稀疏向量字段param{metric_type:IP},limit20)# 3. RRF 融合resultscollection.hybrid_search(reqs[vector_req,keyword_req],rankerRRFRanker(k60),# RRF 融合k60limit10)Qdrant 混合搜索fromqdrant_client.modelsimport(Filter,FieldCondition,MatchText,SearchRequest,FusionQuery,Fusion)# Qdrant 的混合搜索resultsclient.query_points(collection_namedemo,queryquery_embedding,usingdense,# 稠密向量prefetch[# 预取先用 BM25 搜索{query:query_text,using:bm25,limit:50}],fusionFusion.RRF,# RRF 融合limit10)Weaviate 混合搜索最简单# Weaviate 原生支持混合搜索responseclient.query.get(Article,[title,content]).with_hybrid(queryMilvus 2.4 新特性,alpha0.5# 0纯BM25, 1纯向量, 0.5混合).with_limit(10).do() alpha 参数调优指南alpha 控制向量和关键词的权重比例alpha 值含义适用场景0.0纯 BM25 关键词搜索精确术语搜索产品型号、版本号0.3关键词为主技术文档、API 名称搜索0.5均衡混合大多数场景推荐0.7向量为主概念性、语义性搜索1.0纯向量语义搜索模糊意图、自然语言问答 alpha 值对结果的影响 查询: Milvus 2.4 新特性 alpha0.0 (纯BM25): 1. Milvus 2.4 Release Notes ← 精确匹配 2. Milvus 2.4 升级指南 3. Milvus 2.3 变更日志 alpha0.5 (混合): 1. Milvus 2.4 Release Notes ← 精确语义 2. Milvus 新版本特性汇总 ← 语义补充 3. Milvus 2.4 升级指南 alpha1.0 (纯向量): 1. 数据库新版本功能介绍 ← 语义匹配但不够精确 2. Milvus 2.4 Release Notes 3. 向量数据库发展趋势 混合搜索 vs 纯向量搜索实测对比测试数据集3000 条技术文档问答对搜索方式Recall5Recall10MRR延迟纯向量85.2%91.3%0.724.2ms纯 BM2572.5%80.1%0.652.1ms混合α0.592.8%⬆️96.5%⬆️0.83⬆️5.8ms混合α0.390.1%95.2%0.805.5ms混合α0.791.5%95.8%0.815.6ms关键结论混合搜索比纯向量搜索 Recall5 提升了 7.6 个百分点alpha0.5 是最佳平衡点 延迟增加约 1.5ms可接受⚙️ 稀疏向量生成方案混合搜索需要稀疏向量用于 BM25怎么生成方案说明推荐度SPLADE学习的稀疏表示效果最好⭐⭐⭐⭐⭐BM25 向量化传统 BM25 转为稀疏向量⭐⭐⭐⭐OpenAI sparse暂无官方支持⭐⭐手动 BM25数据库内置全文索引⭐⭐⭐# 使用 BM25 生成稀疏向量fromragatouilleimportRAGPretrainedModel# 或使用 simple BM25fromrank_bm25importBM25Okapi# 分词tokenized_docs[doc.split()fordocindocuments]bm25BM25Okapi(tokenized_docs)# 查询query_tokensquery.split()scoresbm25.get_scores(query_tokens) 本篇核心要点回顾要点说明为什么需要混合搜索向量搜索对精确关键词不敏感RRF 融合最常用的融合算法简单有效alpha 参数0.5 是大多数场景的最佳选择效果提升Recall5 提升 7-30%延迟代价增加约 1-2ms下篇预告《元数据过滤实战给向量加上标签精准过滤百万级数据 ️》有问题欢迎评论区讨论觉得有用请点赞收藏 作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容

相关新闻

再见 Openclaw,桌面端 Agent 起飞了!

再见 Openclaw,桌面端 Agent 起飞了!

1. 引言 过去几年,桌面端 Agent 的开发一直围绕着 Openclaw 等传统框架打转。开发者们习惯了在固定的架构下编写脚本、调度任务、管理状态——直到最近,大语言模型(LLM)的爆发式增长彻底改写了游戏规则。 2025 年,我们…

2026/7/22 21:25:49阅读更多 →
【DEIM 创新改进】CVPR 2026 | 独家创新首发、特征融合改进篇| 引入SAFusion语义对齐融合模块,助力无人机航拍、遥感影像、小目标检测、语义分割、实例分割、目标跟踪任务,有效涨点

【DEIM 创新改进】CVPR 2026 | 独家创新首发、特征融合改进篇| 引入SAFusion语义对齐融合模块,助力无人机航拍、遥感影像、小目标检测、语义分割、实例分割、目标跟踪任务,有效涨点

一、本文介绍 🔥本文给大家介绍使用 SAFusion语义对齐融合模块 改进 DEIM 网络模型,SAFusion模块通过融合浅层细节特征、当前尺度特征与深层语义特征,并依次进行通道级语义对齐、空间位置校正和自适应加权选择,缓解不同层级特征之间的语义差异与空间错位,避免弱小目标信…

2026/7/22 21:25:49阅读更多 →
个人知识库搭建:从信息收集到知识创造的完整指南

个人知识库搭建:从信息收集到知识创造的完整指南

1. 项目概述:打造个人知识库的价值与方法"好文收集(长期更新)"这个看似简单的标题背后,隐藏着每个知识工作者都会面临的痛点:信息过载时代,如何系统性地积累优质内容?我在过去七年里尝试过各种知识管理工具&…

2026/7/22 21:23:49阅读更多 →
HarmonyOS应用开发实战:萌宠日记 - 文件管理与图片存取

HarmonyOS应用开发实战:萌宠日记 - 文件管理与图片存取

HarmonyOS应用开发实战:萌宠日记 - 文件管理与图片存取 前言 文件管理 是 HarmonyOS 应用开发中处理 图片、文件读写 的基础能力。在 萌宠日记 中,文件管理主要用于 存取照片文件、导出备份数据、管理缓存文件,通过 fileIo API 进行文件读写…

2026/7/22 22:17:57阅读更多 →
Chiplets仿真相关概念列表

Chiplets仿真相关概念列表

Content一、系统与单元(宏观层级)二、封装载体与基板(中间层)三、连接与互连结构(物理接口)四、仿真与电气专有概念一、系统与单元(宏观层级) PCB(印刷电路板&#xff09…

2026/7/22 22:17:57阅读更多 →
跨境电商多店铺运营:环境隔离的原理、策略与落地方法

跨境电商多店铺运营:环境隔离的原理、策略与落地方法

跨境电商的朋友,尤其是多店铺独立运营的卖家,更担心的不是没流量,而是一个店铺触发异常、其他店铺被一锅端。平台方(亚马逊、Shopee、Lazada、TikTokShop,以及独立站后台)都在强化关联识别,账号…

2026/7/22 22:17:57阅读更多 →
亚马逊/独立站多店铺:哪类环境隔离方案运营更平稳

亚马逊/独立站多店铺:哪类环境隔离方案运营更平稳

这几年的跨境电商,多店铺运营几乎成了卖家的标配动作。无论是亚马逊、独立站Shopify,还是eBay、TikTokShop,一个团队手里同时跑着十几个甚至几十个账号,早就不是新鲜事。但很多团队在把店开起来之后,一开始撞上的墙往往…

2026/7/22 22:17:57阅读更多 →
AI Agent入门实战:从零构建一个自动化助手

AI Agent入门实战:从零构建一个自动化助手

AI Agent入门实战:从零构建一个自动化助手引言2026年,AI Agent 已经从概念演示变成了生产力工具。各大公司都在部署 Agent 系统——从客服到代码审查,从数据分析到报告生成。但很多人对 Agent 的理解还停留在"调一个 API 就完事"的…

2026/7/22 22:17:57阅读更多 →
BlenderMCP:用自然语言重塑你的3D创作体验

BlenderMCP:用自然语言重塑你的3D创作体验

BlenderMCP:用自然语言重塑你的3D创作体验 【免费下载链接】blender-mcp Open-source MCP to use Blender with any LLM 项目地址: https://gitcode.com/GitHub_Trending/bl/blender-mcp 在3D建模的世界里,复杂的界面和繁琐的操作常常让创意受阻。…

2026/7/22 22:15:57阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →