【向量Milvus】---- Docker部署Milvus向量数据库 保姆级教程

发布时间:2026/7/24 13:24:42
【向量Milvus】---- Docker部署Milvus向量数据库 保姆级教程 文章目录一、前言 二、Milvus是什么 三、应用场景 四、下载安装 环境前提步骤1下载编排文件步骤2启动Milvus服务步骤3查看运行状态步骤4常用运维命令五、实战案例 1. 安装依赖2. Python完整示例代码小结 ✅一、前言 随着**RAG检索增强生成、大模型应用普及传统关系型数据库无法高效处理高维向量相似度检索。Milvus** 作为开源高性能向量数据库广泛用于存储Embedding向量。本文采用**Docker Compose**一键部署单机版Milvus全程命令可直接复制运行最后附带Python向量检索实战案例快速上手向量检索开发。生成向量查询文本相似向量召回业务应用Embedding模型Milvus向量数据库二、Milvus是什么 Milvus是由Zilliz开源、专为向量相似度搜索设计的分布式向量数据库。核心能力存储高维向量支持**L2距离、余弦相似度**等度量方式底层依赖etcd元数据存储、MinIO持久化对象存储部署形态单机Standalone、集群分布式本文使用单机模式适合开发测试Milvus单机架构milvus-standalonemilvus-etcd元数据管理milvus-minio数据持久化客户端/PyMilvus三、应用场景 RAG知识库问答文档向量化存储检索相关片段送入大模型多模态检索以图搜图、音频、视频相似度匹配个性化推荐用户/商品Embedding向量召回相似内容风控异常检测行为特征向量识别异常样本生物信息检索分子、基因高维特征比对四、下载安装 环境前提服务器已安装DockerDocker Compose步骤1下载编排文件新建目录存放配置文件F:\docker-service\milvusmkdirmilvuscdmilvus# 下载官方docker-compose配置 到指定目录 F:\docker-service\milvuswgethttps://github.com/milvus-io/milvus/releases/download/v2.6.20/milvus-standalone-docker-compose.yml-OF:\docker-service\milvus\docker-compose.yml国内下载缓慢可手动浏览器打开链接保存文件步骤2启动Milvus服务# 进入目录cdF:\docker-service\milvusdockercompose up-d启动后自动拉起3个容器milvus-standalone主服务默认端口19530milvus-etcd元数据服务milvus-minio持久化存储步骤3查看运行状态dockercomposeps步骤4常用运维命令# 查看实时日志dockercompose logs-fmilvus-standalone# 停止服务dockercompose down# 停止并清理数据谨慎dockercompose down-v访问地址curl http://127.0.0.1:9091/healthz 客户端通过该地址连接Milvus五、实战案例 使用pymilvus实现连接库→创建集合→插入向量→相似度检索1. 安装依赖#依赖1pipinstallpymilvus#依赖2pipinstallsentence-transformers2. Python完整示例代码importosimporttimefrompymilvusimportMilvusClient,DataType os.environ[HF_ENDPOINT]https://hf-mirror.comdefprint_cost(start,desc:str):costround(time.time()-start,3)print(f✅【{desc}】耗时:{cost}s)returntime.time()if__name____main__:total_starttime.time()step_starttime.time()print(*50)print(1. 开始连接Milvus服务)clientMilvusClient(urihttp://127.0.0.1:19530)step_startprint_cost(step_start,连接Milvus)coll_nameleave_applicationvec_dim384print(\n2. 清理旧集合)ifclient.has_collection(coll_name):client.drop_collection(coll_name)print(等待集合彻底销毁...)wait_times0whileclient.has_collection(coll_name)andwait_times10:time.sleep(0.5)wait_times1print(旧集合删除完毕)step_startprint_cost(step_start,删除旧集合)print(\n3. 使用自定义Schema创建集合 IP索引重点不再用dimension简易模式)# 手动定义结构schemaMilvusClient.create_schema(auto_idFalse,enable_dynamic_fieldTrue)schema.add_field(field_nameid,datatypeDataType.INT64,is_primaryTrue)schema.add_field(field_namevector,datatypeDataType.FLOAT_VECTOR,dimvec_dim)schema.add_field(field_namecontent,datatypeDataType.VARCHAR,max_length1000)# 索引参数IPindex_paramsMilvusClient.prepare_index_params()index_params.add_index(field_namevector,index_typeFLAT,metric_typeIP)client.create_collection(collection_namecoll_name,schemaschema,index_paramsindex_params)step_startprint_cost(step_start,创建集合与索引)# 加载模型fromsentence_transformersimportSentenceTransformerprint(\n4. 加载中文Embedding模型)modelSentenceTransformer(all-MiniLM-L6-v2)step_startprint_cost(step_start,加载SentenceTransformer模型)# 请假数据leave_data_text[{id:1,content:张三申请6月10日请事假1天家中需要处理房屋装修事宜},{id:2,content:李四6月12日申请病假2天感冒发烧需要居家休养附有医院诊断单},{id:3,content:王五申请6月10日休事假回老家办理证件请假时长一天},{id:4,content:赵六6月15日申请年假3天计划外出旅游散心},{id:5,content:孙七6月12日身体不适申请病假一天去医院就诊}]print(\n5. 文本向量化)insert_list[]foriteminleave_data_text:vecmodel.encode(item[content],normalize_embeddingsTrue)insert_list.append({id:item[id],vector:vec,content:item[content]})step_startprint_cost(step_start,全部文本向量化)print(\n6. 插入数据)resclient.insert(collection_namecoll_name,datainsert_list)print(插入结果,res)# 强制落盘保证数据立即可检索Windows Docker必加client.flush(collection_namecoll_name)step_startprint_cost(step_start,插入向量数据flush)defsearch_leave(query_text,top_k3):t0time.time()query_vecmodel.encode(query_text,normalize_embeddingsTrue)resultclient.search(collection_namecoll_name,data[query_vec],limittop_k,metric_typeIP,# 和建索引完全一致output_fields[content])costround(time.time()-t0,3)print(f\n【查询】{query_text}| 查询耗时{cost}s)print(匹配结果)hitsresult[0]ifnothits:print(无匹配记录)returnforhitinhits:print(f相似度:{round(hit[distance],4)}|{hit[entity][content]})# 查询测试search_leave(6月10日谁请了事假)search_leave(哪些员工申请病假)search_leave(谁请假出去旅游)print(\n*50)print(f程序全部执行完毕总耗时{round(time.time()-total_start,3)}s)测试结果F:\docker-service\milvuspy2.py1. 开始连接Milvus服务 ✅【连接Milvus】耗时:0.02s2. 清理旧集合 等待集合彻底销毁... 旧集合删除完毕 ✅【删除旧集合】耗时:1.178s3. 使用自定义Schema创建集合 IP索引重点不再用dimension简易模式 ✅【创建集合与索引】耗时:2.583s4. 加载中文Embedding模型 Loading weights:100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████|103/103[00:0000:00,5866.72it/s]✅【加载SentenceTransformer模型】耗时:12.811s5. 文本向量化 ✅【全部文本向量化】耗时:0.064s6. 插入数据 插入结果{insert_count:5,ids:[1,2,3,4,5]}✅【插入向量数据flush】耗时:2.074s 【查询】6月10日谁请了事假|查询耗时0.022s 匹配结果 相似度:0.773|张三申请6月10日请事假1天家中需要处理房屋装修事宜 相似度:0.7177|孙七6月12日身体不适申请病假一天去医院就诊 相似度:0.6625|王五申请6月10日休事假回老家办理证件请假时长一天 【查询】哪些员工申请病假|查询耗时0.014s 匹配结果 相似度:0.4099|孙七6月12日身体不适申请病假一天去医院就诊 相似度:0.4032|张三申请6月10日请事假1天家中需要处理房屋装修事宜 相似度:0.3717|赵六6月15日申请年假3天计划外出旅游散心 【查询】谁请假出去旅游|查询耗时0.015s 匹配结果 相似度:0.6229|赵六6月15日申请年假3天计划外出旅游散心 相似度:0.4957|张三申请6月10日请事假1天家中需要处理房屋装修事宜 相似度:0.4798|孙七6月12日身体不适申请病假一天去医院就诊程序全部执行完毕总耗时18.782s F:\docker-service\milvus小结 ✅本文完成**Docker Compose**部署Milvus单机版理清基础架构并提供可直接运行的向量检索Demo。开发环境推荐使用本方案生产环境建议采用Milvus集群模式增加资源限制、数据备份与账号鉴权。如果你需要我可以额外补充Attu可视化管理工具的docker-compose部署命令方便图形化管理Milvus。