milvus-io/milvus · 上手攻略
- 仓库:milvus-io/milvus
- 链接:https://github.com/milvus-io/milvus
- 分类:ai
- 作者:Jay
- 更新:2026-07-10
一、是什么
Milvus 是一款高性能、云原生的向量数据库,专为大规模向量 ANN(近似最近邻)搜索场景设计。它能够存储十亿级向量,支持实时插入与查询,广泛用于 AI 应用中的语义搜索、图像检索、RAG(检索增强生成)等场景。
核心特点: - Go + C++ 实现:核心计算用 C++(实现高性能 SIMD 加速),控制层用 Go,兼顾性能与工程化。 - K8s 原生架构:分布式水平扩展,支持读写分离、高可用、故障自动恢复。 - 多索引支持:HNSW、IVF、FLAT、SCANN、DiskANN 等主流向量索引。 - 混合检索:向量搜索 + 元数据过滤(标量字段过滤)结合。
官方提供完全托管云服务 Zilliz Cloud。
二、解决什么问题
- 向量数据量大时搜索慢 — 传统数据库无法高效做向量相似度搜索,Milvus 用 ANN 索引将十亿级向量查询延迟控制在毫秒级。
- 缺乏向量 + 结构化数据联合查询 — 支持在向量检索时加 SQL-style 元数据过滤,一次查询搞定混合搜索。
- 生产环境扩展难题 — K8s 原生设计,支持扩缩容、故障恢复、读写分离,企业级开箱即用。
- 快速原型没有轻量方案 — 提供 Milvus Lite(pip 安装),无需 Docker 即可本地开发调试。
三、快速安装
方式一:Milvus Lite(推荐本地开发)
pip install pymilvus[milvus-lite]
用法——零配置,直接用本地文件存储向量:
from pymilvus import MilvusClient
client = MilvusClient("milvus_demo.db") # 自动创建本地 DB 文件
方式二:Docker 单机部署(开发/测试)
docker run -d \
--name milvus-etcd \
-p 2379:2379 \
-p 2381:2381 \
quay.io/coreos/etcd:v3.5.5 \
etcd -name proxy \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://localhost:2379
docker run -d \
--name milvus-minio \
-p 9001:9001 \
-p 9000:9000 \
minio/minio:latest \
server /minio data --console-address ":9001"
docker run -d \
--name milvus \
-p 19530:19530 \
-p 9091:9091 \
--env ETCD_ENDPOINTS="milvus-etcd:2379" \
--env MINIO_ADDRESS="milvus-minio:9000" \
milvusdb/milvus:v3.2.0
⚠️ 版本请以 Milvus 官方 最新版本为准,当前 Docker compose 方式也可使用官方提供的
docker-compose.yml一键启动。
方式三:Kubernetes 生产部署
参考官方文档:milvus.io/docs/deploy_on_k8s.md
四、核心用法
4.1 基本 CRUD
from pymilvus import MilvusClient
import random
# 连接(单机 / Milvus Lite)
client = MilvusClient(uri="milvus_demo.db")
# 创建 Collection(指定向量维度)
client.create_collection(
collection_name="demo_collection",
dimension=768 # BGE-M3 等常见模型输出 768 维
)
# 插入数据(向量 + 元数据)
data = [
{
"id": i,
"vector": [random.random() for _ in range(768)],
"subject": "science",
"text": f"这是第 {i} 条数据的内容"
}
for i in range(100)
]
client.insert(collection_name="demo_collection", data=data)
4.2 向量搜索
# 编码查询文本为向量(示例用随机向量,实际用 Embedding 模型)
query_vector = [random.random() for _ in range(768)]
results = client.search(
collection_name="demo_collection",
data=[query_vector], # 支持批量查询
limit=5, # top-K
output_fields=["id", "subject", "text"],
filter='subject == "science"' # 元数据过滤
)
for result in results[0]:
print(f"ID: {result['id']}, Distance: {result['distance']:.4f}")
print(f"Text: {result['entity']['text']}")
print("---")
4.3 连接远程 Milvus / Zilliz Cloud
client = MilvusClient(
uri="https://xxx.api.gcp-us-central1.zillizcloud.com:443",
token="<username>:<password_or_api_key>"
)
4.4 索引类型选择
| 索引类型 | 适用场景 | 特点 |
|---|---|---|
| FLAT | 数据量小(<1M),追求精度 | 暴力搜索,无压缩 |
| IVF | 中等规模,高召回 | 聚类加速,精度/速度平衡 |
| HNSW | 需要极低延迟,高召回 | 内存消耗大,速度最快 |
| SCANN | 超大规模,吞吐优先 | 量化加速,Milvus 特长 |
| DiskANN | 十亿级,内存受限 | 磁盘索引,精度损失小 |
# 创建 HNSW 索引
client.create_index(
collection_name="demo_collection",
field_name="vector",
index_params={
"index_type": "HNSW",
"metric_type": "COSINE", # 或 L2 / IP
"params": {"M": 16, "efConstruction": 200}
}
)
4.5 删除与释放
client.drop(collection_name="demo_collection") # 删除 Collection
client.release_collection(collection_name="...") # 释放内存
五、典型适用场景
| 场景 | 推荐配置 |
|---|---|
| RAG 应用向量存储 | Milvus Lite(开发)→ Zilliz Cloud Serverless(生产) |
| 图像/视频向量检索 | HNSW 索引 + 图像 Embedding 模型 |
| 推荐系统(物品相似度) | IVF 索引 + IP(内积)度量 |
| 多租户 SaaS(向量隔离) | 分布式版 + Collection 隔离 |
| 十亿级超大向量库 | DiskANN 索引 + K8s 集群部署 |
六、坑与注意
⚠️ 向量维度必须匹配
Embedding 模型输出维度必须与 Collection 创建时指定的 dimension 完全一致,否则插入/查询会报错。
⚠️ Milvus 版本与 pymilvus SDK 版本
两者版本需要匹配。建议查看 Milvus 兼容性表。当前(2026-07)请以 GitHub Releases 页最新版本为准,不确定版本时请用 pip install pymilvus 拉最新。
⚠️ HNSW 内存占用
HNSW 索引在内存中构建,M 参数越大精度越高但内存越多。生产环境确保机器有足够 RAM。
⚠️ 数据一致性与写入延迟
Milvus 采用最终一致性模型,实时写入后需等待索引构建完成才能被查询到(通常秒级)。对强一致性有要求的场景需要评估。
⚠️ Docker 安装的 etcd 和 MinIO
单机 Docker 安装依赖外部 etcd(元数据存储)和 MinIO(S3 兼容对象存储),生产推荐用官方 docker-compose 一键部署,避免手动配置陷阱。
七、与同类对比
| 特性 | Milvus | Qdrant | Weaviate | Chroma |
|---|---|---|---|---|
| 分布式支持 | ✅ K8s 原生 | ✅(付费版) | ✅ | ❌ 单机 |
| 索引类型 | HNSW/IVF/SCANN/DiskANN | HNSW/DiskANN | HNSW | HNSW/IVF |
| 混合过滤 | ✅ | ✅ | ✅ | ⚪ 较弱 |
| 多语言 SDK | Python/Go/Java/JS/... | 丰富 | 丰富 | Python/JS |
| 上手难度 | 中等 | 较低 | 较低 | 极低 |
| 生产成熟度 | 极高(LF AI 毕业项目) | 高 | 高 | 低(适合原型) |
| 轻量方案 | Milvus Lite | Qdrant Cloud | Cloud | 内嵌模式 |
结论:Milvus 在生产级大规模向量检索场景无可替代;如果只是快速原型 / 小数据量,Chroma(Python 优先)或 Qdrant(Rust 性能好)更轻量。
八、一句话结论
Milvus 是 AI 时代向量数据库的生产标准,十亿级向量毫秒查询、K8s 原生弹性扩展,是构建 RAG、图像搜索、推荐系统等向量密集型应用的底座首选。
来源
- GitHub README: https://github.com/milvus-io/milvus
- Milvus 官方文档: https://milvus.io/docs/
- Zilliz Cloud: https://cloud.zilliz.com
- Milvus Lite: https://milvus.io/docs/milvus_lite.md