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
相关推荐
2301_765703148 分钟前
Python迭代器(Iterator)揭秘:for循环背后的故事倔强的石头10616 分钟前
关键信息基础设施的数据库选型:高可用、全链路安全与平滑替代的技术实践怪兽源码26 分钟前
基于SpringBoot的选课调查系统恒悦sunsite32 分钟前
Redis之配置只读账号梦里小白龙38 分钟前
java 通过Minio上传文件人道领域39 分钟前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)煎蛋学姐43 分钟前
SSM音乐播放软件的开发与实现7g5j0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面2301_821369611 小时前
使用Python进行图像识别:CNN卷积神经网络实战星空露珠1 小时前
速算24点所有题库公式m0_561359671 小时前
使用Kivy开发跨平台的移动应用