Milvus 是什么

一个为「向量」而生的云原生数据库 —— 从定义、功能到落地场景一次讲透

向量数据库 标量 + 向量索引 相似检索 / ANN RAG 底座

①定义与来历:Milvus 到底是什么

一句话:Milvus 是一款开源的云原生向量数据库,专为存储海量高维向量、并提供毫秒级的相似度检索(ANN 近似最近邻)而设计。它把「非结构化数据 → 向量 → 找最相似」这件事做成了数据库级别的能力。

谁做的

由 Zilliz 发起,已捐献给 LF AI & Data 基金会(毕业项目),Apache 2.0 协议开源。

站在巨人肩上

底层向量引擎 Knowhere 封装了 FAISS、Annoy、HNSW 等成熟算法库,并在此之上做工程化。

形态

有单机版(Standalone)、分布式版(Cluster,K8s 部署),还有嵌入式 Milvus Lite 与云上 Zilliz Cloud。

主线版本

当前主推 2.x 系列(存储计算彻底分离的设计),2.4+ 支持多向量 / 稀疏向量,2.5 强化全文检索。

图片/文本/ 音视频 Embedding 模型 [0.12,-0.3, ...] 向量 Milvus 相似检索 非结构化数据 → 向量化 → 存入 Milvus → 按相似度召回 TopK

②核心功能清单

Milvus 不是「只会算余弦距离」的小工具,而是一整套面向生产的向量数据平台能力:

🔎 向量相似检索(ANN)

支持 L2 / IP / COSINE 等多种距离度量,亿级向量毫秒级返回 TopK 最近邻。

🧮 标量 + 向量混合查询

在向量检索的同时按标量字段过滤(如 category='tech' and score>0.8),谓词下推提速。

🎯 多向量 / 多模态

一个 Collection 可含多个向量列(稠密 + 稀疏 + 二进制),支持多路召回后重排。

🗂️ 分区 / 分片

Partition 减少读取范围,Sharding 按主键哈希把写入打散到多节点并行。

⚡ SIMD 加速

原生支持 SSE / AVX2 / AVX512 指令集,向量距离计算大幅提速。

🧩 内置标量索引

倒排、Bloom、hash、树状、位图等索引,加速元数据过滤与主键查询。

🌐 多语言 SDK

Python(pymilvus)、Java、Go、Node.js、RESTful,生态完善。

⏱️ Time Travel / 一致性

基于 TSO 时间戳,支持强一致 / 有界 / 会话 / 最终一致多档级别。

from pymilvus import MilvusClient, DataType

client = MilvusClient("milvus.db")  # 或连接远程 "http://localhost:19530"

schema = MilvusClient.create_schema()
schema.add_field("id", DataType.INT64, is_primary=True)
schema.add_field("embedding", DataType.FLOAT_VECTOR, dim=768)  # 向量字段
schema.add_field("category", DataType.VARCHAR, max_length=64)    # 标量字段

client.create_collection("docs", schema=schema)
client.create_index("docs", "embedding", index_params={"index_type":"HNSW"})

# 向量检索 + 标量过滤(混合查询)
res = client.search("docs", data=[query_vec], anns_field="embedding",
                    filter="category == 'tech'", limit=10, metric_type="COSINE")

③关键问题:标量索引和向量索引,Milvus 都具备吗?

答案:都具备,而且这正是 Milvus 能做「混合查询」的底气。 很多人误以为向量数据库「只有向量索引」——其实 Milvus 对向量字段和标量字段分别建立了两套不同的索引体系。
维度标量索引(Scalar Index)向量索引(Vector Index)
作用对象整数 / 字符串 / 布尔 / JSON 等结构化字段高维浮点 / 二值 / 稀疏向量字段
解决什么加速「等于 / 范围 / 包含」等过滤与主键查找加速「最近邻」相似度检索(替代暴力全扫)
Milvus 内置类型倒排索引(inverted)、Bloom、hash、树状、位图(bitmap,规划中)IVF_FLAT / IVF_PQ / IVF_SQ8 / HNSW / DiskANN / ScaNN / GPU系 / AUTOINDEX
底层算法B+树思想 / 位图 / 哈希 —— 适合「有序 / 可比较」数据聚类(IVF) / 图(HNSW) / 磁盘图(DiskANN) —— 适合「不可比较的高维空间」
能否混用可以 一次查询里标量过滤 + 向量检索同时生效(先过滤再检索 / 谓词下推)
为什么两套都要? 纯向量索引只能回答「最像的 10 个向量是谁」;但真实业务几乎都要「在某个分类下 / 某时间段内 / 某租户里找最像的」。没有标量索引,过滤只能全表遍历,性能崩塌。Milvus 把两者统一在一个 Collection 里,才支撑得起生产级混合检索。
标量索引 (Scalar) 倒排 / Bloom / hash / 位图 加速 = > < 范围、等于、主键 例: category == 'tech' 向量索引 (Vector) IVF / HNSW / DiskANN / ... 加速「最近邻」相似检索 例: 找 TopK 最相似的向量 混合

④核心特点

云原生 · 存储计算分离

接入、协调、执行、存储四层完全独立,计算节点无状态,可随 K8s 弹性扩缩容。

高可用 · 高可靠

组件无单点,依赖 etcd / 对象存储做持久化,故障可快速恢复。

高性能 · 水平扩展

MPP 大规模并行处理 + SIMD,十亿乃至万亿级向量仍可低延迟检索。

开发者友好

多语言 SDK、RESTful、与 LangChain / LlamaIndex 等 AI 框架无缝集成。

与传统关系型数据库的本质区别:MySQL/PostgreSQL 的「行」是结构化记录,索引是 B+树用于范围/等值;Milvus 的「实体」以向量为核心,索引是图/聚类用于相似度。两者解决的问题域不同,所以 Milvus 不是来替代 MySQL 的,而是补足它在「非结构化语义检索」上的空白。

⑤解决什么问题

世界约 80% 的数据是非结构化的:图片、视频、音频、自然语言……它们没有整齐的二维表结构。要让计算机「理解」并检索它们,做法是:

  1. 用 AI / embedding 模型把非结构化数据变成高维向量(如 768 维浮点数组)。
  2. 向量之间的距离 ≈ 原始数据的语义相似度(两个向量越近,代表的东西越像)。
  3. 问题转化为:在亿万个向量里,快速找出与查询向量最像的那几个。
传统数据库为什么搞不定? 向量是「高维空间里的点」,没有天然的「大于/小于」顺序,B+树这种为标量比较设计的索引在向量上失效;而暴力逐个算距离,在千万级数据上慢到不可用。Milvus 正是为「海量向量的相似检索」这个特定问题而生。

⑥应用场景

💬 RAG 检索增强生成

大模型问答前,先从知识库检索最相关片段喂给 LLM。Milvus 是最主流的 RAG 向量底座之一。

🔍 语义搜索

「意思相近」就能搜到,而不只是关键词匹配。客服、文档、商品搜索都适用。

🛒 推荐系统

用户/商品 embedding 后,找相似用户、相似商品,做「看了又看」「猜你喜欢」。

🖼️ 图文 / 音视频检索

以图搜图、以文搜图、视频片段去重与查重。

🛡️ 异常 / 欺诈检测

把行为序列向量化,偏离正常簇的即为异常。

💊 生物 / 药物发现

分子结构向量化后做相似性筛选,加速候选化合物发现。

🤖 智能体记忆

把 Agent 的历史经验存成向量,下次按语义召回相关记忆。

📑 文档聚类 / 去重

海量文本按语义聚类、查重、去噪。

⑦Milvus 与「其他数据库」对比

维度传统关系库 (MySQL)搜索引擎 (Elasticsearch)向量库 (Milvus)
核心数据结构化行记录文档(含全文倒排)高维向量 + 标量
主力索引B+树(标量)倒排索引(全文)+ HNSW(向量)IVF / HNSW / DiskANN(向量)+ 标量索引
擅长查询等值 / 范围 / 事务全文检索 + 混合召回大规模向量相似检索(ANN)
十亿级向量不擅长(需外部向量库)可但非专长专长
典型定位业务系统主库日志 / 搜索中台AI 语义检索底座
一句话选型:业务数据用 MySQL,全文搜索用 ES,海量向量相似检索用 Milvus。三者常常搭配——MySQL 存权威业务数据,Milvus 存其向量副本专做语义召回,ES 做关键词检索,最后在应用层做融合。