【向量库-Milvus】Milvus部署及使用

Milvus 是 LF AI & Data 旗下、Zilliz 主导的开源云原生向量数据库(Apache 2.0 许可),主打高维向量相似性搜索,支持百亿级规模与毫秒级查询,适配 RAG 等 AI 场景,有单机 / 分布式 / 云托管等灵活部署方案,如下为相关部署及使用方案。

一、Milvus部署

1.单机部署(Docker Compose 方式)
(1).安装 Docker 和 Docker Compose

确保系统已安装 Docker 和 Docker Compose。

可以通过命令 docker --version 和 docker-compose --version 检查是否安装成功。

(2).下载 Milvus 的 Docker Compose 配置文件

从 Milvus 的 GitHub 仓库下载最新版本的 milvus-standalone-docker-compose.yml 文件。修改文件名称为:docker-compose.yml

wget https://github.com/milvus-io/milvus/releases/download/v2.6.8/milvus-standalone-docker-compose.yml -O docker-compose.yml

(3).启动 Milvus 服务

在配置文件所在目录下执行命令 docker-compose up -d。

这将启动 Milvus 的三个核心组件容器:milvus-etcd(元数据存储)、milvus-minio(对象存储)和 milvus-standalone(核心服务)。

(4).验证服务状态

使用命令 docker-compose ps 查看容器状态,确保所有容器都正常运行。

可以通过访问 http://localhost:9091/api/v1/health(或 Milvus 服务器的 IP 地址)来验证 Milvus 服务是否健康。

常见的几个端口:

二、Milvus使用

1.java

1.核心pom

java 复制代码
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-milvus-store</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-autoconfigure-vector-store-milvus</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-advisors-vector-store</artifactId>
        </dependency>

        <dependency>
            <groupId>io.milvus</groupId>
            <artifactId>milvus-sdk-java</artifactId>
            <version>2.5.8</version>
        </dependency>

2.application.yml配置

yml 复制代码
spring:
  application:
    name: spring-ai-alibaba-rag-milvus-example
  ai:
    dashscope:
      api-key: sk-XXX
      embedding:
        options:
          model: text-embedding-v1
    vectorstore:
      milvus:
        client:
          host: XXXX
          port: 19530
         username: root
         password: Milvus
        databaseName: default
        collectionName: vector_store
        id-field-name: id          # 你的集合主键字段(替换默认的 doc_id)
        vector-field-name: embedding  # 你的集合向量字段(替换默认的 vector)
        content-field-name: content  # 你的集合文本字段(和你一致)
        metadata-field-name: metadata # 你的集合元数据字段(和你一致)

3.系统链接

java 复制代码
package com.alibaba.cloud.ai.example.rag.config;

import io.milvus.client.MilvusServiceClient;
import io.milvus.param.ConnectParam;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Milvus客户端配置类(手动创建客户端,避免依赖MilvusVectorStore的非公开方法)
 */
@Configuration
public class MilvusConfig {

    // 从application.yml中读取Milvus配置(与原有配置保持一致)
    @Value("${spring.ai.vectorstore.milvus.client.host:localhost}")
    private String milvusHost;

    @Value("${spring.ai.vectorstore.milvus.client.port:19530}")
    private Integer milvusPort;

    // 暴露MilvusServiceClient到Spring容器
    @Bean
    public MilvusServiceClient milvusServiceClient() {
        // 构建Milvus连接参数
        ConnectParam connectParam = ConnectParam.newBuilder()
                .withHost(milvusHost)
                .withPort(milvusPort)
                // 若有认证(后续开启),可添加以下配置:
                // .withUsername(username)
                // .withPassword(password)
                .build();

        // 创建并返回Milvus客户端
        MilvusServiceClient client = new MilvusServiceClient(connectParam);
        System.out.println("Milvus客户端连接成功:" + milvusHost + ":" + milvusPort);
        return client;
    }
}
2.python

1.安装 PyMilvus

使用命令 pip install pymilvus 安装 PyMilvus 库。

2.创建连接及相关操作

python 复制代码
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility

# 1. 连接到你的 Milvus 服务器(使用你的密码)
connections.connect(
    alias="default",
    host='XXX',  # 你的服务器IP
    port='19530',
    user='root',          # 用户名
    password='pw'   # 你的密码
)

# 2. 定义集合名称(必须与Spring AI期望的完全一致)
collection_name = "vector_store"

# 3. 如果集合已存在,先删除(仅第一次运行时可能需要)
if utility.has_collection(collection_name):
    collection = Collection(collection_name)
    collection.drop()
    print(f"已删除现有集合: {collection_name}")

# 4. 定义字段(必须与Spring AI MilvusVectorStore的默认schema匹配)
# Spring AI MilvusVectorStore 的默认主键字段名是 "id",向量字段名是 "embedding"
fields = [
    FieldSchema(name="id", dtype=DataType.VARCHAR, is_primary=True, max_length=65535),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536), # 维度需与你的嵌入模型匹配,text-embedding-v1 是1536维
    FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=65535), # 存储原始文本
    FieldSchema(name="metadata", dtype=DataType.JSON), # 存储元数据
]

# 5. 创建集合Schema
schema = CollectionSchema(fields, description="Spring AI vector store collection")

# 6. 创建集合
collection = Collection(name=collection_name, schema=schema)

# 7. 创建索引(非常重要,否则无法搜索)
index_params = {
    "index_type": "AUTOINDEX",  # 或根据场景选择 "IVF_FLAT", "HNSW"
    "metric_type": "COSINE",    # 文本相似度通常用余弦相似度
    "params": {}                # AUTOINDEX 无需额外参数
}

collection.create_index(
    field_name="embedding", 
    index_params=index_params,
    index_name="embedding_index"
)

print(f"✅ 集合 '{collection_name}' 创建成功!")
print(f"   主键字段: id (VARCHAR)")
print(f"   向量字段: embedding (FLOAT_VECTOR, dim=1536)")
print(f"   索引类型: AUTOINDEX, 度量方式: COSINE")

三、客户端管理工具-Attu

1.部署 Attu

Attu 是 Milvus 的官方图形化管理工具,可以通过 Docker 部署。

下载 Attu 的 Docker Compose 配置文件并启动服务。

shell 复制代码
docker run --name milvus-attu -p 8100:3000 -e MILVUS_URL=localhost:19530 zilliz/attu:latest
2.连接 Milvus

打开 Attu 的 Web 界面 http://IP:8100/#/connect,输入 Milvus 服务器的 IP 地址和端口(默认为 19530)进行连接。

注意:Attu的容器与Milvus不是一个容器,若Milvus主机开启了防火墙,需要在防火墙上放通

3.管理集合和数据

在 Attu 界面上可以直观地创建、查看、编辑和删除集合,以及插入、查询和删除数据。

相关推荐
秋氘渔3 小时前
LlamaIndex 实战 Milvus 向量数据库:从 CRUD 到 智能检索
milvus·llamaindex
玖日大大1 天前
Milvus 深度解析:开源向量数据库的技术架构、实践指南与生态生态
数据库·开源·milvus
长路 ㅤ   3 天前
Milvus向量库Java对接使用指南
milvus·向量数据库·索引优化·混合搜索·ann搜索
福大大架构师每日一题5 天前
milvus v2.6.8 发布:搜索高亮上线,性能与稳定性全面跃升,生产环境强烈推荐升级
android·java·milvus
Clarence Liu7 天前
Milvus学习(1) 架构和部署
学习·架构·milvus
托尼吴8 天前
milvus 向量数据库学习笔记-基础认识
数据库·学习·milvus
liuc03178 天前
调用embedding生成向量并存储到milvus中,进行查询
embedding·milvus
西柚小萌新10 天前
【大模型:RAG】--向量数据库Milvus详解2
数据库·milvus
程序员柒叔11 天前
Dify 集成-向量数据库
数据库·milvus·向量数据库·工作流·dify·向量库