一、Milvus 是什么?(通俗版)

1.1 一句话定义

Milvus 是一款开源、高性能、专门存向量的数据库。
它只干一件事:
存储海量向量 → 快速查询最相似的向量

1.2 向量是什么?

图片、文字、音频、视频 → 经过 AI 模型 → 变成一串数字(比如 512 维、1024 维)

[0.12, 0.45, 0.67, ..., 0.89]

这串数字就叫向量(Embedding)

1.3 Milvus 能干嘛?

  • 图片检索(以图搜图)
  • 文本相似匹配(智能问答)
  • 推荐系统
  • 人脸识别
  • 大模型 RAG 知识库(最常用!)

现在最火的 AI 知识库 RAG,90% 用 Milvus 做向量存储!


二、Milvus 核心原理(初学者必懂)

2.1 核心能力

Milvus 只做两件事:

  1. 插入向量(存)
  2. 搜索相似向量(查)

2.2 为什么不用 MySQL?

  • MySQL 不擅长高维向量计算
  • 100万条数据 MySQL 查要几秒
  • Milvus 查只要 几毫秒

2.3 Milvus 核心结构

  1. Collection(集合)
    相当于 MySQL 的

  2. Field(字段)
    普通字段 + 向量字段

  3. Vector(向量)
    必须指定维度:128/512/768/1024

  4. Index(索引)
    让搜索变快的关键
    常用:IVF_FLAT、IVF_SQ8、HNSW

  5. Partition(分区)
    数据分片,加速查询


三、Milvus 工作流程(超简单)

1. 创建集合(指定维度)
2. 创建索引
3. 插入向量数据
4. 输入一个向量 → 搜索 TOP-K 最相似结果

四、Java 连接 Milvus 实战(完整可运行)

4.1 环境准备

  1. 安装 Milvus(Docker 一行命令)
docker run -d --name milvus -p 19530:19530 milvusdb/milvus:v2.3.0
  1. Java 项目引入依赖(Maven)
<dependency>
    <groupId>io.milvus</groupId>
    <artifactId>milvus-sdk-java</artifactId>
    <version>2.3.0</version>
</dependency>

五、Java 完整代码示例(初学者直接跑)

5.1 连接 Milvus

import io.milvus.client.MilvusServiceClient;
import io.milvus.param.ConnectParam;

public class MilvusConnect {
    public static MilvusServiceClient getClient() {
        ConnectParam connectParam = ConnectParam.newBuilder()
                .withHost("localhost")
                .withPort(19530)
                .build();
        
        return new MilvusServiceClient(connectParam);
    }
}

5.2 创建集合(表)

public void createCollection() {
    MilvusServiceClient client = MilvusConnect.getClient();

    // 创建集合:test_collection
    CreateCollectionParam param = CreateCollectionParam.newBuilder()
            .withCollectionName("test_collection")
            .withDescription("测试集合")
            .addField(FieldType.newBuilder()
                    .withName("id")
                    .withDataType(DataType.Int64)
                    .withPrimaryKey(true)
                    .withAutoID(true)
                    .build())
            .addField(FieldType.newBuilder()
                    .withName("vector")
                    .withDataType(DataType.FloatVector)
                    .withDimension(512)  // 向量维度 512
                    .build())
            .build();

    client.createCollection(param);
    System.out.println("集合创建成功");
}

5.3 创建索引(必须建,不然搜索极慢)

public void createIndex() {
    MilvusServiceClient client = MilvusConnect.getClient();

    IndexParam indexParam = IndexParam.newBuilder()
            .withCollectionName("test_collection")
            .withFieldName("vector")
            .withIndexType(IndexType.HNSW)       // 最快的索引
            .withMetricType(MetricType.L2)       // 欧式距离
            .build();

    client.createIndex(indexParam);
    System.out.println("索引创建成功");
}

5.4 插入向量数据

public void insert() {
    MilvusServiceClient client = MilvusConnect.getClient();

    // 构造 512 维向量(模拟 AI 生成的向量)
    List<Float> vector = new ArrayList<>();
    for (int i = 0; i < 512; i++) {
        vector.add((float) Math.random());
    }

    List<List<Float>> vectors = new ArrayList<>();
    vectors.add(vector);

    InsertParam insertParam = InsertParam.newBuilder()
            .withCollectionName("test_collection")
            .addVectorField("vector", vectors)
            .build();

    client.insert(insertParam);
    System.out.println("向量插入成功");
}

5.5 向量搜索(最核心功能)

public void search() {
    MilvusServiceClient client = MilvusConnect.getClient();

    // 构造待搜索向量
    List<Float> queryVector = new ArrayList<>();
    for (int i = 0; i < 512; i++) {
        queryVector.add((float) Math.random());
    }

    SearchParam searchParam = SearchParam.newBuilder()
            .withCollectionName("test_collection")
            .withTopK(5)          // 返回 TOP5 最相似
            .withVectorFieldName("vector")
            .withVectors(Collections.singletonList(queryVector))
            .withMetricType(MetricType.L2)
            .build();

    SearchResponse response = client.search(searchParam);
    System.out.println("搜索结果:" + response);
}

六、Milvus 核心概念速查表(初学者必背)

概念 说明
Collection
Vector 向量(数字数组)
Dimension 向量维度(512/768/1024)
Index 索引(加速搜索)
HNSW 高性能索引(推荐)
L2 欧式距离(相似度计算)
TOP-K 返回最相似的 K 条

七、最简单学习路线(3 天学会)

  1. 跑通 Java 连接代码
  2. 学会创建集合 + 索引
  3. 学会插入向量
  4. 学会搜索向量
  5. 结合大模型做 RAG 知识库(终极目标)

八、我可以继续帮你

你想要我继续提供哪些内容?(任选)

  1. SpringBoot 整合 Milvus 完整项目
  2. RAG 知识库 Java 实战代码
  3. Milvus 可视化管理工具 Attu 使用
  4. Milvus 生产部署优化方案

你直接告诉我,我马上给你写!

更多推荐