Milvus 使用 java方式

3 篇文章 0 订阅


Milvus 基本概念


一、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>

二、MilvusServiceClient 引入

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

1.引入配置类

代码如下(示例):
首先yml

milvus:
  config:
    ipAddr: *****
    port: ****

import io.milvus.client.MilvusServiceClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
public class MilvusConfiguration {

    /**
     *  milvus ip addr
     */
    @Value("${milvus.config.ipAddr}")
    private String ipAddr;

    /**
     * milvus   port
     */
    @Value("${milvus.config.port}")
    private Integer port;

    @Bean
    @Scope("singleton")
    public MilvusServiceClient getMilvusClient() {
        return getMilvusFactory().getMilvusClient();
    }

    @Bean(initMethod = "init", destroyMethod = "close")
    public MilvusRestClientFactory getMilvusFactory() {
        return  MilvusRestClientFactory.build(ipAddr, port);
    }
}

或 注意 @Value(“${milvus.port}”) 原理一致

@Configuration
public class MilvusConfig {

    @Value("${milvus.host}")
    private String host; //milvus所在服务器地址
    @Value("${milvus.port}")
    private Integer port; //milvus端口

    @Bean
    public MilvusServiceClient milvusServiceClient() {
        ConnectParam connectParam = ConnectParam.newBuilder()
                .withHost(host)
                .withPort(port)
                .build();
        return new MilvusServiceClient(connectParam);
    }
}

2.常用方法

1.判断集合是否已经存在
代码如下(示例):

R<Boolean> response = milvusServiceClient.hasCollection(
        HasCollectionParam.newBuilder()
            .withCollectionName("表名")
            .build());

2.创建集合 + 创建索引 + 把集合加载到内存中
代码如下(示例):

 FieldType id = FieldType.newBuilder()
                    .withName("id")
                    .withDataType(DataType.Int64)
                    .withPrimaryKey(true)
                    .withAutoID(false)
                    .withDescription("id")
                    .build();
            FieldType user_id  = FieldType.newBuilder()
                    .withName("user_id")
                    .withDataType(DataType.VarChar)
                    .withMaxLength(1000)
                    .withDescription("user_id")
                    .build();
            FieldType question  = FieldType.newBuilder()
                    .withName("question")
                    .withDataType(DataType.VarChar)
                    .withMaxLength(10000)
                    .withDescription("question")
                    .build();
            FieldType answer  = FieldType.newBuilder()
                    .withName("answer")
                    .withDataType(DataType.VarChar)
                    .withMaxLength(10000)
                    .withDescription("answer")
                    .build();
            FieldType question_vector = FieldType.newBuilder()
                    .withName("question_vector")
                    .withDescription("question 向量")
                    .withDataType(DataType.FloatVector)
                    .withDimension(1536)
                    .build();
            CreateCollectionParam createCollectionReq = 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 条数。
                .withExtraParam("{\"M\":8,\"efConstruction\":64}")
                .build());
/**
注意 load() 把数据加的内存中 影响 搜索
*/
             R<RpcStatus> response1 = milvusServiceClient.loadCollection(LoadCollectionParam.newBuilder()
                //集合名称
                .withCollectionName("qalog")
                .build());                    

3.数据插入
代码如下(示例):

LambdaQueryWrapper<QaLog> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(QaLog::getStatus,"未审核");
        //todo 正则 优化
        List<QaLog> qaLogList =  qaLogService.list(lambdaQueryWrapper);
        int total = qaLogList.size();
        for (int i = 0; i < total/100; i ++) {
            List<InsertParam.Field> fields = new ArrayList<>();
            fields.add(new InsertParam.Field("id", Collections.singletonList(Long.valueOf(qaLogList.get(i).getLogId()))));
            fields.add(new InsertParam.Field("user_id", Collections.singletonList(qaLogList.get(i).getQuestion())));
            fields.add(new InsertParam.Field("question", Collections.singletonList(qaLogList.get(i).getQuestion())));
            fields.add(new InsertParam.Field("answer", Collections.singletonList(qaLogList.get(i).getAnswer())));
            fields.add(new InsertParam.Field("question_vector", embeddingsUtils.getEmbeddings(qaLogList.get(i).getQuestion())));
            InsertParam insertParam = InsertParam.newBuilder()
                    .withCollectionName("qalog")
                    .withFields(fields)
                    .build();
            R<MutationResult> insert = milvusServiceClient.insert(insertParam);
  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
作为一个人工智能引擎,Milvus可以与Java编程语言集成,为开发者提供高效的数据存储和检索功能。以下是使用JavaMilvus进行集成的步骤: 1. 下载并安装Java SDK和Milvus服务器。 2. 在Java项目中添加Milvus的依赖项。 3. 连接到Milvus服务器。 ```java import io.milvus.client.*; MilvusClient client = new MilvusGrpcClient("localhost", 19530); ``` 4. 创建集合。 ```java String collectionName = "my_collection"; int dimension = 128; CollectionMapping collectionMapping = CollectionMapping.newBuilder() .setCollectionName(collectionName) .setDimension(dimension) .setIndexFileSize(1024) .setMetricType(MetricType.L2) .build(); client.createCollection(collectionMapping); ``` 5. 插入向量数据。 ```java List<FloatVector> vectors = new ArrayList<>(); vectors.add(FloatVector.newBuilder().addValue(1.0f).addValue(2.0f).build()); vectors.add(FloatVector.newBuilder().addValue(2.0f).addValue(3.0f).build()); List<Long> ids = client.insert(collectionName, vectors); ``` 6. 进行向量检索。 ```java SearchParam searchParam = SearchParam.newBuilder() .setCollectionName(collectionName) .setQueryRecordNum(10) .setQueryRangeArray( Range.newBuilder() .setStartValue(0.0) .setEndValue(1.0) .build() ).build(); SearchResponse searchResponse = client.search(searchParam); ``` 7. 删除数据和集合。 ```java client.deleteByIds(collectionName, ids); client.dropCollection(collectionName); ``` 以上是使用JavaMilvus进行集成的基本步骤。开发者可以根据自己的需求进行定制化开发,以实现更高效的数据存储和检索。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值