向量数据库实战:选型、调优与落地~系列文章06:Milvus 2.x 入门实战:从安装到第一次相似度查询

📅 2026/7/17 12:45:52
向量数据库实战:选型、调优与落地~系列文章06:Milvus 2.x 入门实战:从安装到第一次相似度查询
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 安装# 安装 PyMilvuspipinstallpymilvus2.4.0# 验证安装python-cimport pymilvus; print(pymilvus.__version__) 第一次完整实战Step 1连接 Milvusfrompymilvusimportconnections,utility# 连接 Milvusconnections.connect(aliasdefault,hostlocalhost,port19530)# 检查连接状态print(fMilvus 版本:{utility.get_server_version()})# 输出: Milvus 版本: 2.4.xStep 2创建集合CollectionfrompymilvusimportCollectionSchema,FieldSchema,DataType# 定义字段# 1. 主键字段id_fieldFieldSchema(nameid,dtypeDataType.INT64,is_primaryTrue,# 主键auto_idTrue# 自动生成 ID)# 2. 文本字段存储原始文本text_fieldFieldSchema(nametext,dtypeDataType.VARCHAR,max_length65535# 最大长度)# 3. 向量字段存储 embeddingvector_fieldFieldSchema(nameembedding,dtypeDataType.FLOAT_VECTOR,dim1024# 向量维度要和嵌入模型匹配)# 创建 SchemaschemaCollectionSchema(fields[id_field,text_field,vector_field],description知识库文档集合)# 创建 CollectionfrompymilvusimportCollection collectionCollection(nameknowledge_base,schemaschema,consistency_levelStrong# 一致性级别)集合结构可视化┌─────────────────────────────────────────────────┐ │ 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_nameembedding,index_paramsindex_params)Step 4插入数据importnumpyasnp# 模拟数据实际项目中这里调用 Embedding 模型texts[向量数据库是一种专门用于存储和检索高维向量的数据库系统,HNSW 是一种基于图的近似最近邻搜索算法,RAG 技术通过检索增强生成来提升大模型的回答质量,Milvus 是全球最流行的开源向量数据库,余弦相似度是衡量两个向量方向相似程度的指标,]# 模拟 embedding实际中应调用嵌入模型embeddingsnp.random.rand(5,1024).tolist()# 插入数据data[texts,# text 字段embeddings# embedding 字段]resultcollection.insert(data)print(f插入成功插入条数:{result.insert_count})# 输出: 插入成功插入条数: 5Step 5加载集合 查询# 加载集合到内存必须Milvus 查询前需要 loadcollection.load()# 准备查询向量query_text什么是向量数据库query_embeddingnp.random.rand(1,1024).tolist()# 模拟查询向量# 执行搜索search_params{metric_type:COSINE,params:{ef:128}}resultscollection.search(dataquery_embedding,anns_fieldembedding,paramsearch_params,limit3,# 返回 Top-3output_fields[text],# 返回原始文本consistency_levelStrong)# 打印结果forhitsinresults:forhitinhits:print(fID:{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 的 TablePartition集合的分区表的分区Segment数据段内部自动管理数据块Entity一条数据记录一行数据Field字段列Schema数据结构定义表结构Index索引数据库索引⚙️ 一致性级别详解Milvus 提供了4 种一致性级别这是一个很多人忽略的重要配置一致性级别说明延迟适用场景Strong强一致写入立即可见最高金融、医疗等关键场景Session会话一致同一会话内可见较高用户交互场景Bounded有界一致允许短暂延迟低⚡大多数场景推荐Eventually最终一致最低对实时性要求不高的批量任务# 推荐大多数场景用 Bounded 就够了collection.search(...,consistency_levelBounded# 性能最优的选择) Attu可视化管理工具强烈推荐安装 Attu——Milvus 的 Web 管理界面 # Docker 安装 Attudockerrun-d--nameattu\--attachable\--networkmilvus\-p8000:3000\-eMILVUS_URLmilvus:19530\zilliz/attu:latestAttu 能做什么功能说明 数据浏览可视化查看集合中的数据 向量搜索在界面上直接做向量查询 性能监控查看 QPS、延迟等指标⚙️ 索引管理创建/查看/删除索引 系统信息查看集群状态⚠️ 新手常见坑坑 1忘记 load 就查询# ❌ 错误直接查询resultscollection.search(...)# 报错# ✅ 正确先 loadcollection.load()resultscollection.search(...)坑 2向量维度不匹配# ❌ 错误集合定义 1024 维插入 768 维collection.insert([texts,wrong_dim_embeddings])# 报错# ✅ 正确确保维度一致# 集合定义 dim1024嵌入模型输出也必须是 1024 维坑 3不创建索引就查询# ❌ 错误不建索引就查询走暴力搜索极慢resultscollection.search(...)# ✅ 正确先建索引collection.create_index(embedding,index_params)collection.load()resultscollection.search(...) 本篇核心要点回顾要点说明安装Docker Compose 一键部署核心流程连接 → 建集合 → 建索引 → 插入 → Load → 查询一致性级别大多数场景用 Bounded 即可Attu强烈推荐安装的可视化工具常见坑忘记 load、维度不匹配、不建索引✍️ 写在最后Milvus 的上手其实很简单——10 行代码就能完成第一次向量查询。但能用和用好之间还隔着索引调优、分布式部署、性能监控等很多功课。接下来的几篇我们会继续实战其他向量数据库Qdrant、Chroma、FAISS、Weaviate最后来一个六大数据库横评帮你做出最适合你项目的选择 下篇预告《Qdrant 实战Rust 写的向量数据库到底有多快⚡》有问题欢迎评论区讨论觉得有用请点赞收藏 作者高炉炼铁智能化技术研究者专注钢铁冶金与人工智能 交叉领域。 如果觉得有帮助请点赞、收藏、转发版权归作者所有未经许可请勿抄袭套用商用(或其它具有利益性行为)。 关注专栏不错过后续精彩内容