发布时间:2025-06-24 19:33:30  作者:北方职教升学中心  阅读量:586


MilvusServiceClient 引入

    • 1.引入配置类
    • 2.常用方法

  • Milvus 基本概念


    一、MilvusServiceClient 引入

    需要跟milvus交互都需要调用MilvusServiceClient,我这里的做法是把它定义成一个Bean,需要用到的地方依赖注入

    1.引入配置类

    代码如下(示例):
    首先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);}}

    2.常用方法

    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);