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


二、解决什么问题

  1. 向量数据量大时搜索慢 — 传统数据库无法高效做向量相似度搜索,Milvus 用 ANN 索引将十亿级向量查询延迟控制在毫秒级。
  2. 缺乏向量 + 结构化数据联合查询 — 支持在向量检索时加 SQL-style 元数据过滤,一次查询搞定混合搜索。
  3. 生产环境扩展难题 — K8s 原生设计,支持扩缩容、故障恢复、读写分离,企业级开箱即用。
  4. 快速原型没有轻量方案 — 提供 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