资讯动态

小白从 Milvus 开始了解稠密向量、稀疏向量、稠密索引、稀疏索引、混合搜索

发布时间:2026/8/21 19:25:37 来源:尧图企业网站定制
稀疏向量是一种特殊的高维向量其中大部分元素为零只有少数维度的值不为零。如下图所示稠密向量通常表示为连续数组其中每个位置都有一个值例如[0.3, 0.8, 0.2, 0.3, 0.1] 。相比之下稀疏向量只存储非零元素及其维度的索引通常以{ index: value} 的键值对表示如[{2: 0.2}, …, {9997: 0.5}, {9999: 0.7}] 。字段使用SPARSE_FLOAT_VECTOR 数据类型存储稀疏向量。类型向量特点常见来源Milvus 字段类型稠密向量Dense Vector每个维度都有数值如[0.2, -1.3, 0.8, ..., 0.5]长度固定如 768 维BERT、ResNet、CLIP 等深度学习模型输出FLOAT_VECTOR或BFLOAT16_VECTOR稀疏向量Sparse Vector只有少数位置有值大部分是 0如{15: 2.1, 1024: 0.9}用“索引:值”表示BM25、SPLADE、ColBERT 等关键词或稀疏文本模型SPARSE_FLOAT_VECTOR我是小朋友稠密向量 (Dense Vector)小朋友的解释: 这就像一个几乎每个抽屉里都放了东西的抽屉柜。比如这个柜子有 1000 个小抽屉里面有 900 多个抽屉都放了玩具、糖果或者小卡片。虽然不是每个抽屉都满但大部分都装了东西。在电脑里: 它就像一个长长的数字列表里面大部分数字都不是 0比如 [0.1, 0.8, -0.3, 0.99, …]后面还有很多很多数字。2. 稀疏向量 (Sparse Vector)**小朋友的解释: 这就像一个超级大但是绝大部分抽屉都是空的抽屉柜。比如说这个柜子有 10000 个小抽屉但是只有 10 个抽屉里放了东西其他的 9990 个抽屉都是空的。在电脑里: 它也是一个长长的数字列表但里面大部分数字都是 0比如 [0, 0, 0, 5.2, 0, 0, 0, 0, -1.8, …]后面跟着好多好多的 0。 稠密索引Dense Index就像你每个玩具都仔细拍一张照片写清楚它是什么、颜色、大小、品牌……这些信息非常完整所以当你想找“红色的小汽车”时系统能很快在所有照片里找到它。这种“每个玩具都有详细资料”的方式就叫稠密索引。✅ 优点找得准、找得快尤其适合图像、人脸、语音这些“整体感觉”重要的东西。❌ 缺点要存很多信息占地方稠密索引 (Dense Index)目的: 专门为了加速稠密向量的近似最近邻搜索ANN而设计的索引结构。常见算法:IVF_FLAT:基于倒排文件Inverted File的方法先将向量聚类搜索时只在相关簇中查找。IVF_SQ8: IVF 的量化版本通过标量量化压缩向量以节省内存牺牲少量精度换取更高效率。HNSW(Hierarchical Navigable Small World): 一种高效的图遍历算法通过构建多层导航图实现快速搜索在精度和速度上表现优异。DISKANN: 适用于超大规模数据集利用磁盘进行存储和搜索。选择: 用户可以根据对查询延迟、召回率和内存使用的要求来选择合适的稠密索引类型。稀疏索引 (Sparse Index)目的: 专门为了优化稀疏向量的存储和检索效率而设计的索引。常见算法:SPARSE_INVERTED_INDEX: 专门为稀疏向量设计的倒排索引利用向量的稀疏性只索引非零元素能有效提升搜索性能。SPARSE_WAND_INDEX: 基于 WAND 算法的稀疏索引旨在更高效地处理内积等相似度计算通常比 SPARSE_INVERTED_INDEX 更快。优势: 这些索引充分利用了稀疏向量的特性避免了对大量零值的无效计算和存储。️ 稀疏索引Sparse Index现在换一种方式你只记下每个玩具最关键的几个词比如“乐高”、“会发光”、“恐龙”。很多玩具可能只有一两个关键词甚至有些地方是空的比如一个普通小球你只写了“球”。这种“只记重点、其他不管”的方式就叫稀疏索引。✅ 优点省空间特别适合处理文字比如一句话里只有几个重要词。❌ 缺点如果关键词没写对可能找不到混合索引 (Hybrid Index / Hybrid Search)目的: 用于同时处理稠密向量和稀疏向量的组合搜索场景以结合两种向量的优势提供更全面、更精确的检索结果。例如结合语义搜索稠密向量和关键词匹配稀疏向量。实现方式:在一个集合Collection中创建两个独立的字段一个用于存储稠密向量并建立稠密索引另一个用于存储稀疏向量并建立稀疏索引。执行混合搜索时系统会分别在这两种索引上执行搜索并将得到的结果分数按照一定方式进行融合例如加权求和最后返回排序后的综合结果。应用场景: 高级的搜索引擎、推荐系统等需要同时考虑语义理解和精确关键词匹配的场合。总结来说Milvus 通过对稠密和稀疏向量及其对应索引的支持能够满足从传统信息检索到现代 AI混合搜索 (Hybrid Search)小朋友的解释: 这就像你既想靠颜色比如找红色的东西来找玩具又想靠形状比如找圆形的东西来找玩具。你把这两个方法混在一起用。比如你先找所有红色的东西再在里面挑出圆形的或者你觉得颜色更重要就多按颜色来挑但也看看形状。混合搜索就是把“稠密向量搜索”像靠形状找和“稀疏向量搜索”像靠颜色找这两种方法结合起来帮你找到最符合你心意的东西在电脑里: 它就是把稠密向量搜索和稀疏向量搜索的结果合并起来让你可以同时根据“语义意思”稠密和“关键词”稀疏来查找信息得到更准确、更全面的结果。比如你问“一只可爱的猫”电脑既能理解“猫”的样子稠密也能识别“可爱”这个关键词稀疏然后给你最好的答案。总结稠密向量: 抽屉柜里东西很多。稀疏向量: 抽屉柜里东西很少大部分是空的。稠密索引: 给东西很多的柜子做的详细地图。稀疏索引: 给东西很少的柜子做的聪明地图只记有东西的地方。混合搜索: 把两种找东西的方法稠密和稀疏混在一起用找到最棒的结果# 示例伪代码 dense_query_vector[...]# 查询的稠密向量 sparse_query_vector{token_id1:weight1}# 查询的稀疏向量 # 执行混合搜索 search_params{metric_type:COSINE,# 稠密部分的度量params:{nprobe:10},expr:some_scalar_filter,# 可选的标量过滤条件}resultsmilvus_client.hybrid_search(collection_name,reqs[# 定义每个向量字段的搜索请求AnnSearchRequest(dense_query_vector,dense_vector,search_params,limit10),AnnSearchRequest(sparse_query_vector,sparse_vector,{metric_type:IP},limit10)# 稀疏向量的搜索参数],rerankRRFRanker(),# 指定如何融合和重排结果例如RRF(Reciprocal Rank Fusion)limit10,# 最终返回的 Top-K 数量 output_fields[text,id])

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价