Milvus介绍和使用
1、什么是MilvusMilvus 由 Zilliz 开发并即将捐赠给 Linux 基金会旗下的 LF AI Data Foundation现已成为全球领先的开源向量数据库项目之一。海量规模单集合支持百亿级向量水平扩展丰富索引AUTOINDEX、HNSW、IVF_FLAT、IVF_PQ、DISKANN等多距离度量COSINE、L2、IP、HAMMING等混合检索向量相似度 标量字段过滤metadata filter一次完成云原生计算存储分离存算可独立扩容数据落在对象存储MinIO/S3多语言 SDKPythonpymilvus、Java、Go、Node.js、RESTful、gRPC1.1官方地址https://milvus.io/zh1.2 三种部署形态形态说明适用Milvus Lite单进程库数据存本地文件快速原型、NotebookStandalone单机 Docker Compose 一键部署学习、开发、小规模生产ClusterK8s 分布式集群大规模生产2、核心概念对照关系型数据库理解最快关系型数据库Milvus说明DatabaseDatabase库逻辑隔离TableCollection集合一组相同结构的向量ColumnField字段主键、标量字段、向量字段RowEntity一条记录一个向量 一堆标量Primary KeyPrimary Key FieldMilvus 支持 Int64 / VarChar 主键索引Index建立在向量字段或标量字段上SELECT ... WHERESearch / Query向量检索 / 标量查询表结构定义 (DDL)集合模式 (Collection Schema)Milvus 需要预先定义好 Schema明确包含哪些字段及其类型才能创建集合。2.1 Collection 的 Schema一个最小可用的 Collection 至少要有一个主键字段和一个向量字段。例如示例项目中 Spring AI 约定使用下面四个字段名字不能改字段名类型说明doc_idVarChar(64)主键文档 IDcontentVarChar(65535)文档正文metadataVarChar(65535)元数据以 JSON 字符串存储embeddingFloatVector(dim)向量维度必须与 Embedding 模型输出一致2.2 距离度量怎么选分类大类具体类型核心机制 / 特点典型适用场景一、度量类型如何算相似度欧氏距离 (L2)计算空间直线距离值越小越相似。对向量的大小/模长敏感。计算机视觉、图像检索、对特征绝对差异敏感的场景。内积 (IP)计算向量点积值越大越相似。同时看方向和大小。推荐系统、协同过滤向量大小/强度包含信息时。余弦相似度 (COSINE)计算向量夹角余弦值值越大越相似。只看方向忽略大小。文本/NLP、语义搜索、RAG最通用省心的选择。二、索引类型如何加速检索平面 (FLAT)暴力精确计算100% 召回率但速度最慢、内存消耗大。小数据集百万级以下、要求绝对准确的场景。IVF_FLAT倒排索引 原始向量。速度和内存平衡召回率较高。中等规模数据集需要平衡精度和性能的场景。IVF_SQ8标量量化内存占用大幅降低约为原 1/4速度快精度略有损失。内存受限且能接受轻微精度损失的大规模场景。IVF_PQ乘积量化极致压缩内存但精度损失较大。超大规模数据集内存极度受限的场景。GPU_IVF_FLAT基于 GPU 的 IVF_FLAT利用 GPU 加速吞吐量极高。对延迟要求极高、有 GPU 资源的高吞吐场景。GPU_IVF_PQ基于 GPU 的 IVF_PQ兼顾 GPU 速度与内存压缩。超大规模 GPU 加速场景。HNSW基于图的索引检索速度极快召回率极高。当前最流行的索引之一适合对延迟和精度要求都很高的场景内存消耗较大。DISKANN磁盘索引内存占用极低适合超大规模。百亿级向量、内存严重受限的场景。三、向量数据类型界面顶部标签浮点 (Float)存储连续浮点数FLOAT_VECTOR最常用的向量类型。配合上述 L2 / IP / COSINE 度量适用于绝大多数 AI 场景。嵌入二进制嵌入 (Binary)存储二进制向量BINARY_VECTOR。配合汉明/杰卡德距离适合哈希或极速粗筛。稀疏嵌入 (Sparse)存储稀疏向量SPARSE_FLOAT_VECTOR。配合 BM25 或内积适合关键词 语义的混合检索。3、docker compose安装单节点3.1 安装文档https://milvus.io/docs/zh/install_standalone-docker-compose.md3.2 安装Milvus 在其仓库中提供了一个 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus只需运行wget https://github.com/milvus-io/milvus/releases/download/v3.0.2/milvus-standalone-docker-compose.yaml -O docker-compose.yaml sudo docker compose up -d Creating milvus-etcd ... done Creating milvus-minio ... done Creating milvus-standalone ... done默认部署v3.0.2docker compose up -d将启动三个容器——milvus-etcd元数据、milvus-minio对象存储和milvus-standalone。消息队列使用Woodpecker嵌入式以 MinIO / 对象存储作为其 WAL 后端因此无需单独的消息队列容器。各版本的消息队列默认设置2.5.x— 默认消息队列为RocksMQ。2.6.x 及更高版本— 默认消息队列为Woodpecker嵌入式。启动 Milvus 后名为Milvus Standalone、milvus-minio和milvus-etcd的容器已启动。milvus-etcd容器未向主机暴露任何端口并将数据映射到当前文件夹中的volumes/etcd。milvus-minio容器在本地监听9000和9001端口使用默认身份验证凭据并将数据映射到当前文件夹中的volumes/minio目录。Milvus Standalone容器在本地通过默认设置提供19530端口服务并将数据映射到当前文件夹中的volumes/milvus目录。您可以使用以下命令检查容器是否已启动并正在运行docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS milvus-etcd … etcd -advertise-cli… etcd 2 minutes ago Up 2 minutes (healthy) 2379-2380/tcp milvus-minio … /usr/bin/docker-ent… minio 2 minutes ago Up 2 minutes (healthy) 9000-9001/tcp milvus-standalone … /tini -- milvus run… standalone 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:9091-9091/tcp, 0.0.0.0:19530-19530/tcp3.3 访问WebUI您还可以访问http://127.0.0.1:9091/webui/上的 Milvus WebUI以了解有关您的 Milvus 实例的更多信息。有关详细信息请参阅Milvus WebUI。4、java代码示例4.1 依赖properties java.version21/java.version spring-ai.version2.0.0/spring-ai.version /properties dependencies !-- Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webmvc/artifactId /dependency !-- Milvus 向量存储 Starter核心 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-vector-store-milvus/artifactId /dependency !-- Ollama Embedding 模型 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-ollama/artifactId /dependency !-- 读取 PDF/Word/TXT 等文档 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-tika-document-reader/artifactId /dependency /dependencies dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement4.2 配置application.yamlspring: ai: vectorstore: milvus: client: host: 172.168.0.1 # Milvus 地址 port: 19530 # gRPC 端口 collection-name: spring_ai_docs # 关键必须与 Embedding 模型输出维度完全一致 embedding-dimension: 768 # 距离算法COSINE / L2 / IP metric-type: COSINE # 首次启动设为 true让 Spring AI 自动建集合与索引 initialize-schema: true ollama: base-url: http://172.168.0.1:11434 embedding: model: nomic-embed-text:latest配置要点配置项说明collection-name集合名不存在且initialize-schematrue时自动创建embedding-dimension必须与模型维度一致否则写不进去metric-type相似度算法改了需要重建集合与索引initialize-schema自动建表开关生产环境建议关掉用 Flyway/脚本管理结构4.3 文档向量增删改查CRUD4.3.1 增单条 / 批量// 单条指定 ID 正文 元数据 Document doc new Document( TEST_ID, Milvus 是一个开源的分布式向量数据库支持向量相似度搜索和丰富的过滤功能。, Map.of(category, database, type, test) ); vectorStore.add(List.of(doc)); // 批量 ListDocument docs List.of( new Document(Java 是一门面向对象的编程语言……, Map.of(category, programming, lang, java)), new Document(Python 简洁易学在 AI 领域广泛使用……, Map.of(category, programming, lang, python)) ); vectorStore.add(docs);metadata 会被序列化成 JSON 存进metadata字段是后续做过滤的唯一依据。4.3.2 查相似度检索ListDocument results vectorStore.similaritySearch( SearchRequest.builder() .query(高性能向量数据库) // 自然语言查询无需关键词命中 .topK(3) // 返回最相似的 3 条 .similarityThreshold(0.3) // 相似度下限0~1过滤噪声 .build() );4.3.3 查带 metadata 过滤混合检索FilterExpressionBuilder b new FilterExpressionBuilder(); ListDocument results vectorStore.similaritySearch( SearchRequest.builder() .query(编程语言) .topK(5) .similarityThreshold(0.3) .filterExpression(b.and( b.eq(category, programming), b.eq(lang, java) ).build()) .build() );常用过滤表达式eq/ne/gt/gte/lt/lte/in/nin/like/and/or/not。4.3.4 改删除 重新插入向量数据库一般不支持「原地改向量」标准做法是按 ID 删除后再插入同 ID 的新文档vectorStore.delete(List.of(TEST_ID)); // 1. 删旧 Document updated new Document(TEST_ID, 新内容……, Map.of(version, v2)); vectorStore.add(List.of(updated)); // 2. 插新保持 ID 不变4.3.5 删按 ID / 按过滤条件vectorStore.delete(List.of(tempId)); // 按 ID 批量删 vectorStore.delete(b.eq(type, test).build()); // 按条件删清理测试数据

相关新闻

AI自动修Bug实战:从一句Bug描述到复现、根因定位、最小修复与回归验证

AI自动修Bug实战:从一句Bug描述到复现、根因定位、最小修复与回归验证

AI自动修Bug实战:从一句Bug描述到复现、根因定位、最小修复与回归验证AI编程 Agent 智能体 Bug修复 软件测试 自动化测试 Python 代码审查 软件工程 持续集成一个 Bug 只有一句自然语言描述时,AI 能不能真正完成“复现—定位—修复—验证”&…

2026/10/13 9:49:58 阅读更多 →
具身智能创新原理(2):揭开具身智能本质区别于大模型的残酷真相

具身智能创新原理(2):揭开具身智能本质区别于大模型的残酷真相

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

2026/10/13 9:48:56 阅读更多 →
如何高效构建AI日报:从信息筛选到结构化输出的完整指南

如何高效构建AI日报:从信息筛选到结构化输出的完整指南

1. 一份“AI日报”到底在记录什么每天早上九点前,我会把过去二十四小时里跟人工智能相关的动态过一遍,筛出真正值得关注的那几条,整理成一份内部参考。这个习惯坚持了快两年,从最开始随手记在备忘录里,到后来形成固定的…

2026/10/13 9:48:56 阅读更多 →

最新新闻

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

Nacos配置中心中文乱码怎么办?SpringBoot环境UTF-8编码配置指南

搞微服务的同学,不管在哪个团队,迟早会在Nacos配置中心里碰上一次乱码。我这两年接到过不少工单,报的都是同一个毛病:本地启动一切正常,一到测试或生产环境,前端拿到的中文全变成问号,或者日志里…

2026/10/13 10:38:24 阅读更多 →
用Python从零构建抓包工具:实时抓包、离线分析与代理调试

用Python从零构建抓包工具:实时抓包、离线分析与代理调试

做小程序后端联调时,我经常遇到这种局面:客户端明明发了某个请求,服务端日志里却什么都没有;真机测试一切正常,一上体验版就超时;前端说参数格式没问题,后端说根本不是自己定义的字段。两边都拿…

2026/10/13 10:38:24 阅读更多 →
DDoS攻击原理与防御实战指南:从攻击流程到应急响应

DDoS攻击原理与防御实战指南:从攻击流程到应急响应

做运维这些年,被半夜电话吵醒的次数已经数不清了——不是服务器宕机,就是有人在打你的站。DDoS 这三个字母,圈子里早就讲烂了,但真正能把它讲透、讲得让零基础的人看懂并知道怎么应对的内容,反而没多少。大部分文章都停…

2026/10/13 10:38:24 阅读更多 →
CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具

CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具

简介:CGAssistant是一款面向CrossGate游戏玩家的C开发的自动化辅助工具,聚焦于cg_item_6000功能模块,适用于希望提升游戏操作效率与脚本化交互能力的进阶玩家及逆向/外挂开发学习者。资源包共2088个文件,主体为1158个JavaScript逻…

2026/10/13 10:38:24 阅读更多 →
Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

简介:本资源为Windows Server 2012 R2专用64位网卡驱动程序合集,面向企业IT运维人员、系统管理员及虚拟化平台部署工程师,专用于解决该版本服务器在新硬件(如Intel X710、Broadcom NetXtreme等主流网卡)上因驱动缺失或…

2026/10/13 10:38:23 阅读更多 →
VS Code中高效读取HDF5文件:从插件预览到h5py实战

VS Code中高效读取HDF5文件:从插件预览到h5py实战

你有没有遇到过这种场面:同事或者对接方丢给你一个.h5文件,说是训练好的模型权重,或者某次实验的全部原始数据,你兴冲冲地在 VS Code 里双击打开,结果满屏都是二进制乱码。这个画面我见过太多次了,包括我自…

2026/10/13 10:37:18 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →