向量数据库实战:选型、调优与落地~系列文章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:51 阅读更多 →
【DEIM 创新改进】CVPR 2026 | 独家创新首发、特征融合改进篇| 引入SAFusion语义对齐融合模块,助力无人机航拍、遥感影像、小目标检测、语义分割、实例分割、目标跟踪任务,有效涨点

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

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

2026/7/22 21:25:51 阅读更多 →
解决Xcode索引慢问题:Rugby缓存原理与实战案例

解决Xcode索引慢问题:Rugby缓存原理与实战案例

解决Xcode索引慢问题:Rugby缓存原理与实战案例 【免费下载链接】Rugby 🏈 Cache CocoaPods for faster rebuild and indexing Xcode project. 项目地址: https://gitcode.com/gh_mirrors/ru/Rugby 作为iOS开发者,你是否经常遇到Xcode索…

2026/7/22 21:24:51 阅读更多 →

最新新闻

PyTorch-SoftDTW-CUDA与CPU版性能对决:实验数据告诉你何时该用GPU加速

PyTorch-SoftDTW-CUDA与CPU版性能对决:实验数据告诉你何时该用GPU加速

PyTorch-SoftDTW-CUDA与CPU版性能对决:实验数据告诉你何时该用GPU加速 【免费下载链接】pytorch-softdtw-cuda Fast CUDA implementation of (differentiable) soft dynamic time warping for PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pytorch-softd…

2026/7/22 22:09:06 阅读更多 →
HarmonyOS应用开发实战:萌宠日记 - 空白占位与 Flex 布局

HarmonyOS应用开发实战:萌宠日记 - 空白占位与 Flex 布局

HarmonyOS应用开发实战:萌宠日记 - 空白占位与 Flex 布局 前言 在 萌宠日记 的布局设计中,空白占位 和 弹性布局 是两个至关重要的概念。Blank() 组件用于 弹性占位,将内容推到容器两端;Flex 组件用于 灵活排列,支持换…

2026/7/22 22:09:06 阅读更多 →
五大餐饮收银软件排行榜,哪家具有高性价比

五大餐饮收银软件排行榜,哪家具有高性价比

在餐饮业不断发展的今天,越来越多的餐饮老板选择淘汰传统的餐饮收银方式,转向更智能的餐饮经营,最为明显的改变就是购买餐饮收银软件。现如今的餐饮收银软件已经覆盖了餐饮经营的全流程,从扫码点餐到预定桌台,从会员营…

2026/7/22 22:09:06 阅读更多 →
终极指南:如何在macOS上完全解锁第三方鼠标侧键功能

终极指南:如何在macOS上完全解锁第三方鼠标侧键功能

终极指南:如何在macOS上完全解锁第三方鼠标侧键功能 【免费下载链接】sensible-side-buttons A macOS menu bar app that enables system-wide navigation functionality for the side buttons on third-party mice. 项目地址: https://gitcode.com/gh_mirrors/se…

2026/7/22 22:09:06 阅读更多 →
别再手动开机启动!Systemd 一键搞定所有后台服务

别再手动开机启动!Systemd 一键搞定所有后台服务

在 Windows 系统中,我们可以通过 services.msc 图形界面管理系统服务、设置程序开机自启。而在 Linux(CentOS 7 及以上)系统中,官方默认采用 Systemd 作为系统初始化与服务管理框架,替代了传统的 SysVinit,…

2026/7/22 22:09:06 阅读更多 →
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析

VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析

随着企业全球化业务的发展,传统电话通信正在向基于互联网协议的通信模式演进。VoIP(Voice over Internet Protocol,网络电话)凭借低成本、高扩展性、全球部署能力等优势,已经成为云通信平台的重要组成部分。对于企业级…

2026/7/22 22:08:05 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/22 12:54:44 阅读更多 →

月新闻