package org.dromara.langchain4j.config;
import io.milvus.client.MilvusServiceClient;
import io.milvus.grpc.DataType;
import io.milvus.grpc.MutationResult;
import io.milvus.grpc.SearchResults;
import io.milvus.param.*;
import io.milvus.param.collection.CreateCollectionParam;
import io.milvus.param.collection.FieldType;
import io.milvus.param.collection.LoadCollectionParam;
import io.milvus.param.dml.InsertParam;
import io.milvus.param.dml.SearchParam;
import io.milvus.param.index.CreateIndexParam;
import io.milvus.response.QueryResultsWrapper;
import io.milvus.response.SearchResultsWrapper;
import java.util.*;
public class MilvusJavaDemo {
// 1. 连接Milvus服务器
private static MilvusServiceClient connectMilvus() {
String uri = "http://localhost:19530"; // Milvus服务地址
ConnectParam connectParam = ConnectParam.newBuilder()
.withUri(uri)
.build();
return new MilvusServiceClient(connectParam);
}
public static void main(String[] args) {
MilvusServiceClient client = connectMilvus();
final String COLLECTION_NAME = "book_collection";
final int VECTOR_DIM = 768; // 向量维度
try {
// 4. 加载集合到内存(搜索前必须步骤)
R<RpcStatus> loadRes = client.loadCollection(LoadCollectionParam.newBuilder()
.withCollectionName(COLLECTION_NAME)
.build());
// 5. 插入数据(增 - Create)
Random ran = new Random();
// 6. 执行向量相似性搜索(查 - Read/Query)
// 准备一个随机向量作为查询目标
List<Float> targetVector = new ArrayList<>();
for (int i = 0; i < VECTOR_DIM; i++) {
targetVector.add(ran.nextFloat());
}
List<List<Float>> searchVectors = Arrays.asList(targetVector);
SearchParam searchParam = SearchParam.newBuilder()
.withCollectionName(COLLECTION_NAME)
.withVectorFieldName("book_intro")
.withVectors(searchVectors)
.withTopK(2) // 返回最相似的2条结果
.withMetricType(MetricType.L2)
.withParams("{\"nprobe\":10}") // 搜索参数
.addOutField("word_count") // 指定返回的标量字段
.build();
R<SearchResults> searchRes = client.search(searchParam);
if (searchRes.getStatus() == R.Status.Success.getCode()) {
SearchResultsWrapper wrapper = new SearchResultsWrapper(searchRes.getData().getResults());
System.out.println("\n搜索完成,结果如下:");
for (QueryResultsWrapper.RowRecord results : wrapper.getRowRecords()) {
// System.out.printf("距离: %f, 数据: %s%n", results.getFieldValues(), record.getFields());
Map<String, Object> fieldValues = results.getFieldValues();
for (Map.Entry<String, Object> entry : fieldValues.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
// 7. 删除数据(删 - Delete)
// 构建删除表达式,例如删除 word_count < 9000 的记录
// String deleteExpr = "word_count < 9000";
// DeleteParam deleteParam = DeleteParam.newBuilder()
// .withCollectionName(COLLECTION_NAME)
// .withExpr(deleteExpr)
// .build();
// R<MutationResult> deleteRes = client.delete(deleteParam);
// long deleteCount = deleteRes.getData().getDeleteCnt();
// System.out.println("\n删除操作完成,删除了 " + deleteCount + " 条记录。");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 8. 可选:删除集合(清理环境)
// R<RpcStatus> dropRes = client.dropCollection(DropCollectionParam.newBuilder()
// .withCollectionName(COLLECTION_NAME)
// .build());
// System.out.println("集合已删除。");
// 关闭客户端连接
client.close();
}
}
}
java调用milvus数据库
ShadowSmartMicros2025-12-20 17:30
相关推荐
不会c嘎嘎2 小时前
MySQL 指南:全面掌握用户管理与权限控制Selegant2 小时前
Kubernetes + Helm + ArgoCD:打造 GitOps 驱动的 Java 应用交付流水线禾高网络2 小时前
互联网医院系统,互联网医院系统核心功能及技术Bug.ink2 小时前
BUUCTF——WEB(2)待╮續2 小时前
JVMS (JDK Version Manager) 使用教程hgz07102 小时前
企业级Nginx反向代理与负载均衡实战网硕互联的小客服3 小时前
Centos系统如何更改root账户用户名?需要注意什么?diudiu96283 小时前
Maven配置阿里云镜像lisanmengmeng3 小时前
zentao的prod环境升级(一)