Java使用Milvus指南

Java使用Milvus指南

接着上文Milvus安装篇,我们再看看作为一个Java开发者如何连接并使用Milvus向量数据库

Java使用Milvus向量数据库有两种方式

直接引用对应版本的SDK

[安装 Milvus Java SDK | Milvus 文档](https://milvus.io/docs/zh/view-collections.md)

我们根据官方文档可以找到自己对应的版本SDK,官方提供了一下两种方式:

  • Apache Maven
▼
xml
复制代码
<dependency> <groupId>io.milvus</groupId> <artifactId>milvus-sdk-java</artifactId> <version>2.5.7</version> </dependency>
  • Gradle/Grails
▼
groovy
复制代码
implementation 'io.milvus:milvus-sdk-java:2.5.7'

以Maven工程为例,创建client

▼
java
复制代码
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder() .uri("http://121.204.251.79:19530") .username("hypersense") .password("hypersense") .build()); ListCollectionsResp resp = client.listCollections();

以上版本是2.5.x的创建方式,具体方式查看对应版本文档

数据库 | Milvus 文档

SpringBoot 集成Milvus

根据Spring AI:1.0.0-M6 为例,1.0.0-M7已经发布了,上次尝试一下原来的代码连接不上硅基了,果断回退了,慢慢摸索。

自动装载的方式

maven导入

▼
xml
复制代码
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-vector-store-milvus</artifactId> </dependency>

​ Gradle 导入

▼
groovy
复制代码
dependencies { implementation 'org.springframework.ai:spring-ai-starter-vector-store-milvus' }

​ application.yml 配置写入

▼
yml
复制代码
spring: ai: vectorstore: milvus: client: host: "localhost" port: 19530 username: "root" password: "milvus" databaseName: "default" collectionName: "vector_store" embeddingDimension: 1536 indexType: IVF_FLAT metricType: COSINE

使用

▼
java
复制代码
@Autowired VectorStore vectorStore; // 你可以直接在你的SpringBoot项目中注入向量存储,它会自动根据配置文件装载MilvusVectorStore

手动配置的方式

导入Spring AI 物料库

▼
xml
复制代码
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency>

在你需要的模块下导入milvus依赖

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

使用

  • 创建配置文件
▼
java
复制代码
/** * @Author: HyperSense * @CreateTime: 2025-04-16 * @Description: Milvus 向量库连接配置 * @Version: 1.0 */ @Configuration public class MilvusConfig { /** * milvus ip addr */ @Value("${"+VectorConstant.MILVUS_HOST+"}") private String host; /** * milvus port */ @Value("${"+VectorConstant.MILVUS_PORT+"}") private Integer port; /** * milvus username */ @Value("${"+VectorConstant.MILVUS_USER+"}") private String username; /** * milvus password */ @Value("${"+VectorConstant.MILVUS_PWD+"}") private String password; /** * milvus password */ @Value("${"+VectorConstant.MILVUS_URI+"}") private String uri; /** * milvus collect */ @Value("${"+VectorConstant.MILVUS_COLLECT+"}") private String collection; /** * milvus password */ @Value("${"+VectorConstant.MILVUS_DB+"}") private String database; @Bean public MilvusServiceClient milvusServiceClient() { return new MilvusServiceClient(ConnectParam .newBuilder() .withUri(uri) .withAuthorization(username,password) .build()); } }
  • 创建VectorStore

    根据你的数据库配置创建VectorStore(注意:我使用的是将EmbeddingModel参数传入的方式)

▼
java
复制代码
@Service public class VectorStoreService { @Autowired private Environment env; @Autowired MilvusServiceClient milvusServiceClient; public VectorStore milvusVectorStore(EmbeddingModel embeddingModel) { return MilvusVectorStore.builder(milvusServiceClient, embeddingModel) .collectionName(Objects.requireNonNull(env.getProperty(VectorConstant.MILVUS_COLLECT))) .databaseName(Objects.requireNonNull(env.getProperty(VectorConstant.MILVUS_DB))) .embeddingDimension(1024) .indexType(IndexType.IVF_FLAT) .metricType(MetricType.COSINE) .batchingStrategy(new TokenCountBatchingStrategy()) .initializeSchema(true) .build(); } }

官方使用@Bean方式创建VectorStore:

▼
java
复制代码
@Bean public VectorStore vectorStore(MilvusServiceClient milvusClient, EmbeddingModel embeddingModel) { return MilvusVectorStore.builder(milvusClient, embeddingModel) .collectionName("test_vector_store") .databaseName("default") .indexType(IndexType.IVF_FLAT) .metricType(MetricType.COSINE) .batchingStrategy(new TokenCountBatchingStrategy()) .initializeSchema(true) .build(); } @Bean public MilvusServiceClient milvusClient() { return new MilvusServiceClient(ConnectParam.newBuilder() .withAuthorization("minioadmin", "minioadmin") .withUri(milvusContainer.getEndpoint()) .build()); }

在使用案例:

登陆Attu管理页并创建数据库及集合

  • 创建自己数据库,也可以使用默认default数据库
image-20250417225718477.png
  • 根据你的数据库创建自己的集合,相当于table,根据自己字段填写
image-20250417230015982.png
  • 创建索引并设置索引类型
image-20250417234018482.png

对应你的配置文件参数

image-20250417234118277.png image-20250417234219163.png

以上这个状态就是加载完成了。可以通过Client访问这个集合了,否者会提示 no load

根据上面的配置方案配置项目工程,我以手动配置为例

▼
java
复制代码
//注入定义的 VectorStoreService @Autowired private VectorStoreService vectorStoreService; ...略 /** * 获取相关的文章片段用于增强LLM */ public List<String> getContext(...){ // 根据硅基流动官方嵌入模型创建嵌入模型 var openAiApi = new OpenAiApi.Builder() .apiKey(userModel.getApiKey()) .baseUrl(userModel.getBaseUrl()).build(); OpenAiEmbeddingOptions openAiEmbeddingOptions = OpenAiEmbeddingOptions.builder() .model("BAAI/bge-large-zh-v1.5") .dimensions(1024) .user("Silicon flow embedding online: fast, affordable, and high-quality embedding services. come try it out!") .build(); EmbeddingModel embeddingModel = new OpenAiEmbeddingModel(openAiApi,MetadataMode.EMBED,openAiEmbeddingOptions); return retrieveDocuments(..,,embeddingModel); }
▼
Java
复制代码
/** * 检索相关文档 * @param embeddingModel * @param query * @return */ public List<String> retrieveDocuments(EmbeddingModel embeddingModel, Query query){ DocumentRetriever retriever = VectorStoreDocumentRetriever.builder() .vectorStore(vectorStoreService.milvusVectorStore(embeddingModel)) .similarityThreshold(0.73) .topK(5) .build(); List<Document> documents = retriever.retrieve(query); return Objects.requireNonNull(documents).stream().map(Document::getFormattedContent).collect(Collectors.toList()); }

总结

  • 根据项目工程选择对应的配置方式
  • 建议使用Spring AI 方式,内置很多强大的功能,方便你快速开发AI应用

以上都是自己慢慢看文档摸索的,咱不是赛博丁真,希望你不要克服“讨好型人格” ,觉得有用就来个三连哈哈,玩梗莫当真,随意就好

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP