【向量库-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 界面上可以直观地创建、查看、编辑和删除集合,以及插入、查询和删除数据。

相关推荐
领航猿1号4 天前
Langchain 1.0.2 从入门到精通(含基础、RAG、Milvus、Ollama、MCP、Agents)
langchain·agent·milvus·rag·mcp·langchain 1.0
Knight_AL5 天前
Docker 部署 Milvus 并连接现有 MinIO 对象存储
docker·eureka·milvus
码农阿豪5 天前
基于Milvus与混合检索的云厂商文档智能问答系统:Java SpringBoot全栈实现
java·spring boot·milvus
GeminiJM5 天前
亿级向量检索:Elasticsearch vs. Milvus,性能鸿沟与架构抉择
elasticsearch·架构·milvus
福大大架构师每日一题7 天前
milvus v2.6.9 发布:支持主键搜索、段重开机制、日志性能全面提升!
android·java·milvus
Lkygo10 天前
milvus快速入门(包含图片搜索)
milvus
molaifeng10 天前
告别大模型幻觉:深度解析 RAG 文档切割艺术与 Milvus 高性能实战
milvus·rag
storyseek12 天前
关于Milvus向量数据库的基础
数据库·milvus
Zilliz Planet13 天前
熠智AI+Milvus:从Embedding 到数据处理、问题重写,电商AI客服架构怎么搭?
人工智能·架构·embedding·milvus
weixin_4624462313 天前
Milvus + LangChain + Ollama 搭建生产级 RAG(含 Tag / Metadata 解析)
langchain·milvus·tag·ollama