Milvus介绍和使用

发布时间:2026/10/13 9:50:03
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()); // 按条件删清理测试数据

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询