长期以来,混合查询(Hybrid Search)一直是提升 RAG(Retrieval-Augmented Generation)搜索质量的重要手段。尽管基于密集向量(Dense Embedding)的搜索技术随着模型规模和预训练数据集的不断扩展,在构建 query 和文档之间的深层次语义交互方面展现出令人瞩目的性能,但其仍存在一些显著局限性,例如可解释性不足,以及在处理长尾查询(long-tail queries)和稀有词条(rare terms)时效果欠佳。
对于许多 RAG 应用来说,预训练模型往往缺乏基于领域知识的语料支持,在某些场景下,其性能甚至不及基于 BM25 的关键词匹配检索。在此背景下,混合查询结合了密集向量检索的语义理解能力和关键词匹配的精确性,为解决这些问题提供了更高效的方案,成为提升搜索效果的关键技术。
01.
混合检索很好,但也很复杂
利用 LangChain 或 LlamaIndex 等框架,快速构建一个用于 POC(概念验证)的 Hybrid Retriever 相对简单。然而,构建一个面向海量数据的生产级解决方案则充满挑战。通常情况下我们需要使用专门的Vector Database进行高效的语意检索,同时还需要传统搜索引擎进行关键词检索,以下是一个生产可用的混合检索系统的架构示意图:
这种架构虽然显著提升了搜索质量,但也带来了以下维护上的复杂性:
高昂的基础设施维护成本
数据冗余存储
数据一致性维护困难
安全性和访问控制难以统一
...
采用一套同时支持lexical和semantic search,在提升RAG应用的搜索质量降低系统的维护复杂度和成本,已经成了RAG开发者的迫切诉求。
02.
ES用于检索的工程化泥潭
ElasticSearch 是过去十年搜索领域最具影响力的开源项目之一。基于 Apache Lucene 构建,它凭借高性能、高扩展性和分布式架构广受欢迎。作为一款功能强大的搜索引擎解决方案,ElasticSearch 不仅在全文检索方面表现优异,还在 8.0 版本中引入了向量 ANN 检索功能,大幅降低了实现混合检索的技术门槛。然而,当基于 ElasticSearch 的方案投入生产环境后,往往会面临以下挑战:
数据更新与索引代价高
ElasticSearch 在处理写操作时的开销较大,尤其是在大批量数据更新的场景中。由于其架构设计中数据写入、索引构建和查询未能完全解耦,写操作会显著消耗 CPU 和 IO 资源,严重影响查询性能。对于实时性要求较高或高频更新的业务场景,这种资源竞争和性能损耗成为优化的主要瓶颈。
数据实时性差
ElasticSearch 是一种“近实时”搜索引擎,数据的可见性存在一定延迟。对于部分 AI 应用场景(如 Agent 系统),这种延迟可能会导致实时性不足,难以满足高频交互或动态决策的需求。
分片维护困难,扩展性差
ElasticSearch 使用分片机制来支持分布式架构,但分片管理对用户来说极具挑战。ES未能支持动态分片,在小数据量场景下,分片数量过多可能导致性能不足;而在大数据量场景下,分片数量过少则会限制扩展性,容易出现数据分布不均衡的问题。。
架构非云原生
ElasticSearch 的诞生早于云原生架构的普及,其设计将存储与计算紧密耦合,缺乏与公有云和 Kubernetes(K8s)等现代基础设施的深度整合。在需要扩展资源时,用户不得不同时增加存储和计算资源,灵活性较差。此外,在多副本(Replica)场景下,每个分片都需要独立构建索引,这进一步增加了计算成本,降低了资源利用效率。
向量检索性能低
虽然 ElasticSearch 在 8.0 版本中引入了向量 ANN 检索功能,但其性能与专为向量检索设计的引擎(如 Milvus)相比仍存在显著差距。ElasticSearch 的向量检索基于 Lucene 内核,采用的索引结构在高维数据场景下效率较低,难以满足大规模向量检索的性能需求。此外,在关键场景中,如标量过滤、多租户等复杂应用场景,ElasticSearch 的性能表现更容易出现不稳定,难以支持高负载或多样化的业务需求
资源消耗过高
ElasticSearch 对内存和 CPU 的需求极为苛刻,特别是在处理大规模数据时。其运行依赖 JVM(Java Virtual Machine),需要频繁调整堆内存大小和垃圾回收策略,大大降低了内存的使用效率。与此同时,向量检索对计算性能要求极高,涉及大量 SIMD优化计算,而 JVM 并非处理这些任务的理想环境。
03.
Sparse-BM25,混合检索的未来
Milvus 2.4 引入了稀疏嵌入向量检索,支持类似 Splade 的稀疏向量与稠密向量的混合查询能力,显著提升了搜索质量。然而,诸如 Splade 和 BGE-M3 的预训练模型仍然基于 Bert 等框架构建,有时难以完全适配用户语料库的实际数据分布,在处理长尾查询和罕见词汇时仍存在一定挑战。因此,引入对传统算法(如 BM25)的支持,成为社区呼声较高的优化方向。
在此基础上,Milvus 2.5 创新性地提出了基于稀疏向量的 BM25 检索能力,通过内置的 Sparse-BM25 对 Lexical 检索提供了原生支持,具体包括以下功能:
分词和数据预处理:基于开源搜索库 Tantivy 实现,包括词干提取、词形还原和停用词过滤等功能。
分布式词表和词频统计:高效支持大规模语料的词频管理与计算。
稀疏向量生成与相似度计算:通过语料库的词频(Corpus TF)构建稀疏向量,并基于查询词频(Query TF)和全局逆文档频率 (IDF) 构建查询稀疏向量,再通过特定的 BM25 距离函数进行相似度计算。
倒排索引支持:实现基于 WAND 算法的倒排索引,同时 Block-Max WAND 算法和图索引的支持也在开发中。
相比于 Elasticsearch,Milvus的关键词搜索具有以下显著优势:
算法灵活性
Milvus 将相似度计算转化为向量距离计算,支持更复杂的查询和语料库距离分析。基于论文《End-to-End Query Term Weighting》的研究,Milvus 实现了 Term Weighting BERT(TW-BERT)算法,该算法通过 BERT 模型推断查询中的 n-gram 术语权重,并利用这些权重构建查询表示。结合 BM25 对候选文档的相关性进行计算。与传统基于词项(token)的 BM25 方法相比,TW-BERT 在域内(In-Domain)和域外(Out-Domain)测试中均表现出显著的性能提升。
成本优势
Milvus 通过稀疏向量实现词法搜索,不仅能够利用传统倒排索引的压缩技术,还支持密集嵌入(Dense Embedding)的有损压缩。通过对长尾词进行剪枝和向量量化,Milvus 实现了性能提升超过 5 倍,并在召回率下降不到 1% 的前提下将内存占用减少了 50%以上。同时,未来版本将继续优化数据压缩,进一步降低存储成本和查询 I/O。
针对长查询的优化
传统搜索引擎广泛使用 WAND(Weak AND)技术优化倒排索引查询,通过跳过不相关文档提高效率。然而,WAND 在长查询场景中受限于倒排列表交叉过多和剪枝效率下降的问题。
Milvus 通过稀疏嵌入结合图索引(如 HNSW)显著提升长查询的性能。在 50 维以上稀疏向量搜索场景中,图索引相较传统倒排索引实现了超过 10 倍的性能提升。
04.
Milvus如何成为RAG落地的标配
Milvus 不仅提供更强大的关键词搜索功能,更是构建 RAG 应用时的首选向量数据库。以下是其核心优势:
丰富的元数据:支持动态 Schema 和强大的过滤功能,搭配多种索引选项,为数据管理和检索提供了极大的灵活性。
多租户支持:针对 RAG 应用的多租户需求,Milvus 提供了基于 Collection、Partition 和 Partition Key 等多种粒度的多租户实现,满足不同业务场景的隔离需求。
分层存储:
Milvus 是首个支持磁盘向量索引的开源数据库,大幅降低了向量存储的成本。
当前分层存储架构已覆盖内存、本地磁盘到 S3 等多层存储体系,并将持续优化。
向量存储成本昂贵,建议认真核算你的使用成本!
云原生架构,轻松扩展:基于 Kubernetes 和存算分离的云原生设计,Milvus 能轻松扩展至百亿规模向量,并支持最大千亿级向量的部署。借助云基础设施的弹性,我们实现了从1千万数据逐步插入并自动扩缩容到10亿向量。
多样化的搜索模式:提供 Grouping Search、Range Search 和 Hybrid Search 等多种搜索能力,满足更丰富的检索需求。
强大的生态集成:除了与 LangChain、LlamaIndex 和 Dify 等常见中间件深度整合,Milvus 还无缝支持数十款 AI 产品,详细信息可参考集成概览(https://blog.milvus.io/docs/integrations_overview.md)。
在这过去的一年里,我们亲眼见证了 AI 技术的快速发展。从最初的概念验证(POC)到成熟的生产环境,越来越多的企业正在将 AI 智能真正融入业务流程。Milvus 正是这一转型浪潮中的关键支撑者。我们提供从嵌入式到单机,再到分布式的多样化部署方案,旨在帮助企业最快速地实现从创意孵化到开发落地,再到规模生产的全流程转型。无论是初创公司还是大型企业,Milvus 都致力于降低 AI 应用的技术门槛,让创新更加触手可及。
接下来,Milvus社区将围绕“存的起,看得见”这两大关键词持续发力,持续提升搜索体验和向量存储的极致成本。
05.
写在最后
我们基于开源 Milvus 构建了 Zilliz Cloud,这是一款全托管的向量数据库服务。通过采用云原生设计理念,我们重新实现了 Milvus 协议,使其在易用性、成本效益和安全性上实现了全面提升。
对于仍然受困于 Elastic Search 高额账单的企业,对于为向量检索服务的扩展性和稳定性而担忧的团队,以及那些关心 RAG 应用搜索质量和性能的开发者,Zilliz Cloud 将是你们的理想选择。现在,正是拥抱创新技术的最佳时机。
作为 Milvus 的开发团队,我们深谙构建和维护一个稳定且高性能的向量检索服务的复杂性。我们维护了全球最大规模的向量检索集群,也支持了数以千计的AI应用开发者。基于这些丰富的实践经验,Zilliz Cloud 不仅显著降低了自托管向量服务的运行成本,更重要的是,它帮助用户彻底摆脱繁琐的运维工作。
点击下方“阅读原文”即可免费开始体验Zilliz Cloud。无需信用卡,您的首 100 美金费用由我们承担。
作者介绍
栾小凡
Zilliz 合伙人和研发 VP
LF Al & Data 基金会技术咨询委员会成员
推荐阅读