找回密码
 立即注册
首页 业界区 科技 向量数据库实战:Milvus入门与Java集成

向量数据库实战:Milvus入门与Java集成

恃液 11 小时前

前言

向量数据库是 RAG 系统的核心组件,负责存储和检索高维向量数据。Milvus 是最流行的开源向量数据库,支持十亿级向量检索。本文带你快速入门 Milvus,并完成 Java 集成。

一、Milvus 核心概念

  • Collection:向量数据的集合,类似数据库中的表
  • Partition:集合的分区,提升查询性能
  • Vector Field:存储向量数据的字段
  • Index:向量索引,决定检索性能
  • Metric Type:相似度度量方式(IP欧式距离 / L2欧式距离)

二、快速部署 Milvus(Docker)

  1. # 下载 docker-compose.yml
  2. wget https://github.com/milvus-io/milvus/releases/download/v2.3.3/milvus-standalone-docker-compose.yml -O docker-compose.yml
  3. # 启动 Milvus
  4. docker-compose up -d
  5. # 验证服务
  6. docker ps | grep milvus
复制代码

三、Java 客户端配置

  1. <dependency>
  2. <groupId>io.milvus</groupId>
  3. milvus-sdk-java</artifactId>
  4. <version>2.3.4</version>
  5. </dependency>
复制代码
  1. import io.milvus.client.MilvusClient;
  2. import io.milvus.param.ConnectParam;
  3. import io.milvus.param.collection.FieldType;
  4. import io.milvus.param.collection.CreateCollectionParam;
  5. public class MilvusConfig {
  6. private static final String HOST = "localhost";
  7. private static final int PORT = 19530;
  8. public static MilvusClient createClient() {
  9. ConnectParam param = ConnectParam.newBuilder()
  10. .withHost(HOST)
  11. .withPort(PORT)
  12. .build();
  13. return new MilvusClient(param);
  14. }
  15. }
复制代码

四、创建 Collection

  1. public void createCollection(MilvusClient client) {
  2. // 定义字段
  3. FieldType idField = FieldType.newBuilder()
  4. .withName("id")
  5. .withDataType(DataType.Int64)
  6. .withPrimaryKey(true)
  7. .build();
  8. FieldType vectorField = FieldType.newBuilder()
  9. .withName("embedding")
  10. .withDataType(DataType.FloatVector)
  11. .withDimension(1536) // OpenAI text-embedding-3-small 默认维度
  12. .build();
  13. FieldType textField = FieldType.newBuilder()
  14. .withName("text")
  15. .withDataType(DataType.VarChar)
  16. .withMaxLength(65535)
  17. .build();
  18. CreateCollectionParam param = CreateCollectionParam.newBuilder()
  19. .withCollectionName("documents")
  20. .withDescription("Document embeddings collection")
  21. .addFieldType(idField)
  22. .addFieldType(vectorField)
  23. .addFieldType(textField)
  24. .build();
  25. client.createCollection(param);
  26. System.out.println("Collection created: documents");
  27. }
复制代码

五、插入向量数据

  1. public void insertVectors(MilvusClient client, List<Float[]> vectors, List<String> texts) {
  2. List<List<Float>> vectorList = vectors.stream()
  3. .map(v -> Arrays.asList(v))
  4. .collect(Collectors.toList());
  5. List<InsertParam.Field> fields = Arrays.asList(
  6. new InsertParam.Field("id", Arrays.asList(1L, 2L, 3L)),
  7. new InsertParam.Field("embedding", vectorList),
  8. new InsertParam.Field("text", texts)
  9. );
  10. InsertParam param = InsertParam.newBuilder()
  11. .withCollectionName("documents")
  12. .withFields(fields)
  13. .build();
  14. MutationResult result = client.insert(param);
  15. System.out.println("Inserted " + result.getSuccIndexCount() + " vectors");
  16. // 加载Collection到内存
  17. client.loadCollection("documents");
  18. }
复制代码

六、向量检索

  1. public void search(MilvusClient client, float[] queryVector, int topK) {
  2. SearchParam param = SearchParam.newBuilder()
  3. .withCollectionName("documents")
  4. .withVectorFieldName("embedding")
  5. .withTopK(topK)
  6. .withVectors(Arrays.asList(Arrays.asList(queryVector)))
  7. .withMetricType(MetricType.IP) // 内积相似度
  8. .build();
  9. SearchResult result = client.search(param);
  10. for (SearchResult.ScoredVector sv : result.getRowRecords()) {
  11. System.out.println("ID: " + sv.getVector().get("id")
  12. + ", Score: " + sv.getScore()
  13. + ", Text: " + sv.getVector().get("text"));
  14. }
  15. }
复制代码

七、性能优化建议

  1. 选择合适的索引:HNSW 适合高精度场景,IVF_FLAT 适合大规模数据
  2. Partition 优化:按时间或类别分区,减少检索范围
  3. 批量操作:使用批量插入和批量检索,减少网络开销
  4. 内存管理:确保 Collection 加载到内存,避免磁盘 I/O

总结

Milvus 是构建生产级 RAG 系统的最佳选择。本文涵盖了从部署到 Java 集成的完整流程,下期我们来聊:如何用 Milvus + LangChain4j 构建完整的知识库问答系统

觉得有帮助请点赞收藏!有问题欢迎评论区交流
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册