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
相关推荐
Coder_Boy_6 小时前
技术让开发更轻松的底层矛盾helloworldandy6 小时前
使用Pandas进行数据分析:从数据清洗到可视化invicinble6 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解较真的菜鸟6 小时前
使用ASM和agent监控属性变化黎雁·泠崖6 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理数据知道8 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句qq_12498707538 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)枷锁—sha8 小时前
【SRC】SQL注入WAF 绕过应对策略(二)Coder_Boy_8 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例Mr_sun.8 小时前
Day06——权限认证-项目集成