发布时间:2025-06-24 19:33:30 作者:北方职教升学中心 阅读量:586
MilvusServiceClient 引入
- 1.引入配置类
- 2.常用方法
发布时间:2025-06-24 19:33:30 作者:北方职教升学中心 阅读量:586
MilvusServiceClient 引入
需要跟milvus交互都需要调用MilvusServiceClient,我这里的做法是把它定义成一个Bean,需要用到的地方依赖注入
代码如下(示例):
首先yml
milvus:config:ipAddr:*****port:****
importio.milvus.client.MilvusServiceClient;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Scope;@ConfigurationpublicclassMilvusConfiguration{/** * milvus ip addr */@Value("${milvus.config.ipAddr}")privateStringipAddr;/** * milvus port */@Value("${milvus.config.port}")privateIntegerport;@Bean@Scope("singleton")publicMilvusServiceClientgetMilvusClient(){returngetMilvusFactory().getMilvusClient();}@Bean(initMethod ="init",destroyMethod ="close")publicMilvusRestClientFactorygetMilvusFactory(){returnMilvusRestClientFactory.build(ipAddr,port);}}
或 注意 @Value(“${milvus.port}”) 原理一致
@ConfigurationpublicclassMilvusConfig{@Value("${milvus.host}")privateStringhost;//milvus所在服务器地址@Value("${milvus.port}")privateIntegerport;//milvus端口@BeanpublicMilvusServiceClientmilvusServiceClient(){ConnectParamconnectParam =ConnectParam.newBuilder().withHost(host).withPort(port).build();returnnewMilvusServiceClient(connectParam);}}
1.判断集合是否已经存在
代码如下(示例):
R<Boolean>response =milvusServiceClient.hasCollection(HasCollectionParam.newBuilder().withCollectionName("表名").build());
2.创建集合 + 创建索引 + 把集合加载到内存中
代码如下(示例):
FieldTypeid =FieldType.newBuilder().withName("id").withDataType(DataType.Int64).withPrimaryKey(true).withAutoID(false).withDescription("id").build();FieldTypeuser_id =FieldType.newBuilder().withName("user_id").withDataType(DataType.VarChar).withMaxLength(1000).withDescription("user_id").build();FieldTypequestion =FieldType.newBuilder().withName("question").withDataType(DataType.VarChar).withMaxLength(10000).withDescription("question").build();FieldTypeanswer =FieldType.newBuilder().withName("answer").withDataType(DataType.VarChar).withMaxLength(10000).withDescription("answer").build();FieldTypequestion_vector =FieldType.newBuilder().withName("question_vector").withDescription("question 向量").withDataType(DataType.FloatVector).withDimension(1536).build();CreateCollectionParamcreateCollectionReq =CreateCollectionParam.newBuilder().withCollectionName(FaceArchive.COLLECTION_NAME).addFieldType(id).addFieldType(user_id).addFieldType(question).addFieldType(answer).addFieldType(question_vector).build();milvusServiceClient.createCollection(createCollectionReq);milvusServiceClient.createIndex(CreateIndexParam.newBuilder().withFieldName("question_vector").withCollectionName(FaceArchive.COLLECTION_NAME).withIndexType(IndexType.HNSW).withMetricType(MetricType.L2)//nlist 建议值为 4 × sqrt(n),其中 n 指 segment 最多包含的 entity 条数。Maven 依赖【注意版本 防止依赖冲突】二、Maven 依赖【注意版本 防止依赖冲突】<dependency><groupId>io.milvus</groupId><artifactId>milvus-sdk-java</artifactId><version>2.2.9</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion><exclusion><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId></exclusion></exclusions></dependency>
二、Spring boot 整合 Milvus
- [Milvus 基本概念](https://blog.csdn.net/qq_56352553/article/details/136878306?spm=1001.2014.3001.5501)
- 一、.withExtraParam("{"M":8,"efConstruction":64}").build());/**注意 load() 把数据加的内存中 影响 搜索*/R<RpcStatus>response1 =milvusServiceClient.loadCollection(LoadCollectionParam.newBuilder()//集合名称.withCollectionName("qalog").build());
3.数据插入
代码如下(示例):
LambdaQueryWrapper<QaLog>lambdaQueryWrapper =newLambdaQueryWrapper<>();lambdaQueryWrapper.eq(QaLog::getStatus,"未审核");//todo 正则 优化List<QaLog>qaLogList =qaLogService.list(lambdaQueryWrapper);inttotal =qaLogList.size();for(inti =0;i <total/100;i ++){List<InsertParam.Field>fields =newArrayList<>();fields.add(newInsertParam.Field("id",Collections.singletonList(Long.valueOf(qaLogList.get(i).getLogId()))));fields.add(newInsertParam.Field("user_id",Collections.singletonList(qaLogList.get(i).getQuestion())));fields.add(newInsertParam.Field("question",Collections.singletonList(qaLogList.get(i).getQuestion())));fields.add(newInsertParam.Field("answer",Collections.singletonList(qaLogList.get(i).getAnswer())));fields.add(newInsertParam.Field("question_vector",embeddingsUtils.getEmbeddings(qaLogList.get(i).getQuestion())));InsertParaminsertParam =InsertParam.newBuilder().withCollectionName("qalog").withFields(fields).build();R<MutationResult>insert =milvusServiceClient.insert(insertParam);