向量数据库实战:选型、调优与落地~系列文章06:Milvus 2.x 入门实战:从安装到第一次相似度查询
2026/7/17 12:45:45 网站建设 项目流程

Milvus 2.x 入门实战:从安装到第一次相似度查询 🚀

🔥本文是《向量数据库实战:选型、调优与落地》专栏第 06 篇

⏱️阅读时间:约 15 分钟


🎯 开篇:为什么选 Milvus 作为第一个实战?

在六大向量数据库中,我选择Milvus作为第一个实战对象,原因很简单 👇

理由说明
🏆 最成熟2019 年开源,经过 5 年迭代,社区最活跃
🌟 GitHub Star 最多30k+ Star,全球最大向量数据库社区
📦 功能最全支持 HNSW/IVF/PQ/DiskANN 等全部主流索引
🏗️ 分布式原生从设计之初就支持水平扩展
🇨🇳 国产之光Zilliz 公司主导开发,中文文档完善

一句话:学向量数据库,从 Milvus 开始,性价比最高🎯


🛠️ 环境搭建

方式一:Docker Compose(推荐新手)

# 下载 docker-compose 文件wgethttps://github.com/milvus-io/milvus/releases/download/v2.4.17/milvus-standalone-docker-compose.yml-Odocker-compose.yml# 启动dockercompose up-d# 查看状态dockercomposeps

启动后的组件

┌─────────────────────────────────────────────────────┐ │ Milvus Standalone 架构 │ ├─────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Milvus │◄──►│ etcd │ │ MinIO │ │ │ │ Server │ │ (元数据) │ │ (对象存储)│ │ │ │ :19530 │ │ :2379 │ │ :9000 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ gRPC │ │ ▼ │ │ ┌──────────┐ │ │ │ Attu │ ← Web 管理界面(可选) │ │ │ :8000 │ │ │ └──────────┘ │ │ │ └─────────────────────────────────────────────────────┘

方式二:Python SDK 安装

# 安装 PyMilvuspipinstallpymilvus>=2.4.0# 验证安装python-c"import pymilvus; print(pymilvus.__version__)"

📝 第一次完整实战

Step 1:连接 Milvus

frompymilvusimportconnections,utility# 连接 Milvusconnections.connect(alias="default",host="localhost",port="19530")# 检查连接状态print(f"Milvus 版本:{utility.get_server_version()}")# 输出: Milvus 版本: 2.4.x

Step 2:创建集合(Collection)

frompymilvusimportCollectionSchema,FieldSchema,DataType# 定义字段# 1. 主键字段id_field=FieldSchema(name="id",dtype=DataType.INT64,is_primary=True,# 主键auto_id=True# 自动生成 ID)# 2. 文本字段(存储原始文本)text_field=FieldSchema(name="text",dtype=DataType.VARCHAR,max_length=65535# 最大长度)# 3. 向量字段(存储 embedding)vector_field=FieldSchema(name="embedding",dtype=DataType.FLOAT_VECTOR,dim=1024# 向量维度,要和嵌入模型匹配)# 创建 Schemaschema=CollectionSchema(fields=[id_field,text_field,vector_field],description="知识库文档集合")# 创建 CollectionfrompymilvusimportCollection collection=Collection(name="knowledge_base",schema=schema,consistency_level="Strong"# 一致性级别)

集合结构可视化

┌─────────────────────────────────────────────────┐ │ Collection: knowledge_base │ ├────────┬──────────────────┬─────────────────────┤ │ id │ text │ embedding │ │ (PK) │ (VARCHAR) │ (FLOAT_VECTOR) │ ├────────┼──────────────────┼─────────────────────┤ │ 1 │ "向量数据库..." │ [0.12, -0.34, ...] │ │ 2 │ "HNSW索引..." │ [0.56, 0.78, ...] │ │ 3 │ "RAG检索..." │ [0.23, 0.45, ...] │ │ ... │ ... │ ... │ └────────┴──────────────────┴─────────────────────┘

Step 3:创建索引

# 创建 HNSW 索引index_params={"index_type":"HNSW","metric_type":"COSINE","params":{"M":16,"efConstruction":256}}collection.create_index(field_name="embedding",index_params=index_params)

Step 4:插入数据

importnumpyasnp# 模拟数据(实际项目中这里调用 Embedding 模型)texts=["向量数据库是一种专门用于存储和检索高维向量的数据库系统","HNSW 是一种基于图的近似最近邻搜索算法","RAG 技术通过检索增强生成来提升大模型的回答质量","Milvus 是全球最流行的开源向量数据库","余弦相似度是衡量两个向量方向相似程度的指标",]# 模拟 embedding(实际中应调用嵌入模型)embeddings=np.random.rand(5,1024).tolist()# 插入数据data=[texts,# text 字段embeddings# embedding 字段]result=collection.insert(data)print(f"插入成功,插入条数:{result.insert_count}")# 输出: 插入成功,插入条数: 5

Step 5:加载集合 & 查询

# 加载集合到内存(必须!Milvus 查询前需要 load)collection.load()# 准备查询向量query_text="什么是向量数据库?"query_embedding=np.random.rand(1,1024).tolist()# 模拟查询向量# 执行搜索search_params={"metric_type":"COSINE","params":{"ef":128}}results=collection.search(data=query_embedding,anns_field="embedding",param=search_params,limit=3,# 返回 Top-3output_fields=["text"],# 返回原始文本consistency_level="Strong")# 打印结果forhitsinresults:forhitinhits:print(f"ID:{hit.id}, 距离:{hit.distance:.4f}, 文本:{hit.entity.get('text')}")

输出示例

ID: 1, 距离: 0.8523, 文本: 向量数据库是一种专门用于存储和检索高维向量的数据库系统 ID: 4, 距离: 0.7891, 文本: Milvus 是全球最流行的开源向量数据库 ID: 3, 距离: 0.6234, 文本: RAG 技术通过检索增强生成来提升大模型的回答质量

📊 Milvus 核心概念速查

概念说明类比
Collection数据集合MySQL 的 Table
Partition集合的分区表的分区
Segment数据段(内部自动管理)数据块
Entity一条数据记录一行数据
Field字段
Schema数据结构定义表结构
Index索引数据库索引

⚙️ 一致性级别详解

Milvus 提供了4 种一致性级别,这是一个很多人忽略的重要配置:

一致性级别说明延迟适用场景
Strong强一致,写入立即可见最高金融、医疗等关键场景
Session会话一致,同一会话内可见较高用户交互场景
Bounded有界一致,允许短暂延迟大多数场景推荐
Eventually最终一致最低对实时性要求不高的批量任务
# 推荐:大多数场景用 Bounded 就够了collection.search(...,consistency_level="Bounded"# 性能最优的选择)

🔧 Attu:可视化管理工具

强烈推荐安装 Attu——Milvus 的 Web 管理界面 👇

# Docker 安装 Attudockerrun-d--nameattu\--attachable\--networkmilvus\-p8000:3000\-eMILVUS_URL=milvus:19530\zilliz/attu:latest

Attu 能做什么

功能说明
📊 数据浏览可视化查看集合中的数据
🔍 向量搜索在界面上直接做向量查询
📈 性能监控查看 QPS、延迟等指标
⚙️ 索引管理创建/查看/删除索引
📋 系统信息查看集群状态

⚠️ 新手常见坑

坑 1:忘记 load 就查询

# ❌ 错误:直接查询results=collection.search(...)# 报错!# ✅ 正确:先 loadcollection.load()results=collection.search(...)

坑 2:向量维度不匹配

# ❌ 错误:集合定义 1024 维,插入 768 维collection.insert([texts,wrong_dim_embeddings])# 报错!# ✅ 正确:确保维度一致# 集合定义 dim=1024,嵌入模型输出也必须是 1024 维

坑 3:不创建索引就查询

# ❌ 错误:不建索引就查询(走暴力搜索,极慢)results=collection.search(...)# ✅ 正确:先建索引collection.create_index("embedding",index_params)collection.load()results=collection.search(...)

🔑 本篇核心要点回顾

要点说明
安装Docker Compose 一键部署
核心流程连接 → 建集合 → 建索引 → 插入 → Load → 查询
一致性级别大多数场景用 Bounded 即可
Attu强烈推荐安装的可视化工具
常见坑忘记 load、维度不匹配、不建索引

✍️ 写在最后

Milvus 的上手其实很简单——10 行代码就能完成第一次向量查询

但"能用"和"用好"之间,还隔着索引调优、分布式部署、性能监控等很多功课。

接下来的几篇,我们会继续实战其他向量数据库(Qdrant、Chroma、FAISS、Weaviate),最后来一个六大数据库横评,帮你做出最适合你项目的选择 🎯


📌下篇预告:《Qdrant 实战:Rust 写的向量数据库到底有多快?⚡》

💬有问题欢迎评论区讨论,觉得有用请点赞收藏 👍

作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询