SpringBoot集成Milvus2.3.4(2) |(实现向量的增删改查)

SpringBoot集成Milvus2.3.4(2) |(实现向量的增删改查)


章节
第一章链接: SpringBoot集成Milvus|(实现向量的存储和查询)

前言

Milvus向量数据库简介:Milvus是一个开源的、可扩展的、高性能的向量数据库,采用分布式架构,支持海量向量数据的存储、检索和管理。它主要应用于计算机视觉、自然语言处理、推荐系统等人工智能领域,可以实现相似度检索、聚类分析、降维等功能。Milvus具有以下特点:

  1. 高性能:采用分布式架构和高效的索引算法,实现高速的向量检索和计算。
  2. 可扩展: 支持动态扩容和负载均衡,满足不断增长的数据存储和处理需求。
  3. 易用性: 提供Python、Java、C++等多种语言的SDK,方便用户快速接入和开发应用。
  4. 开源: 基于Apache 2.0协议,允许用户自由使用、修改和分发。

一、Milvus数据库的新增

1.新增数据

新增代码如下:

 public int insertPrepare(List<MilvusParamBo> milvusParamVoList, String collectionName, String partionName) {
   
        List<Long> id_array = new ArrayList<>();
        List<String> libId_array = new ArrayList<>();
        List<String> partId_array = new ArrayList<>();
        List<String> docId_array = new ArrayList<>();
        List<String> category_array = new ArrayList<>();
        List<String> user_array = new ArrayList<>();
        List<List<Integer>> version_array = new ArrayList<>();
        List<List<Float>> embedding_array = new ArrayList<>();
        for (MilvusParamBo vo : milvusParamVoList) {
   
            id_array.add(vo.getMilvusId());
            libId_array.add(vo.getLibId());
            partId_array.add(vo.getPartId());
            docId_array.add(vo.getDocId());
            category_array.add(vo.getCategory());
            user_array.add(vo.getUser());
            version_array.add(vo.getLibVersionList().stream().collect(Collectors.toList()));
            embedding_array.add(vo.getVector());
            log.debug(JSONObject.toJSONString(vo));
        }

        List<InsertParam.Field> fields = new ArrayList<>();
        // 这里的字段在创建集合的时候需要确定好
        fields.add(new InsertParam.Field(MilvusFileId.ID, id_array));
        fields.add(new InsertParam.Field(MilvusFileId.LIBID
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能设计 ​ 系统功能模块较为简单,主要功能就是**新增人脸**和**人脸搜索**两个功能,其中新增人脸使用页面上传和压缩包批量上传两个方式,压缩包上传时文件名称为用户名,下面主要说明人脸搜索的功能流程 ##### Milvues ​ 在介绍前需要说明一下Mulvus ​ Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据(图片 / 视频 / 语音 / 文本)检索。单节点 Milvus 可以在秒内完成十亿级的向量搜索 ​ 因此虹软的SDK只能提取向量及对比的功能,在大规模人脸识别中,需要搜索引擎对于人脸数据进行初步筛选到一个较小的范围后在利用虹软的SDK进行测试,值得一提的是,博主多次测试后Milvues返回的匹配率足以满足人脸匹配的要求,Milvus的安装部署和使用文档参考 https://milvus.io/cn/docs/v2.0.x ​ **特别说明的是**虹软提取的数组是一个经过归一后的1032长度的byte数组,我们需要对数组进行转换,去除前8位的版本号,并将1024长度的byte转为256长度的float向量,这部分可以利用Arrays提供的方法进行转换,代码中也有相应的工具类 ##### 人脸上传(单张) ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
以下是一个MilvusJava示例代码: ```java import io.milvus.client.*; import java.util.Arrays; import java.util.List; public class MilvusDemo { public static void main(String[] args) { // 设置Milvus服务器的IP地址和端口号 String host = "127.0.0.1"; int port = 19530; // 创建Milvus客户端 MilvusClient client = new MilvusGrpcClient(); // 连接到Milvus服务器 ConnectParam connectParam = new ConnectParam.Builder() .withHost(host) .withPort(port) .build(); Response connectResponse = client.connect(connectParam); if (!connectResponse.ok()) { System.out.println("连接到Milvus服务器失败:" + connectResponse.getMessage()); return; } // 创建一个Milvus集合 String collectionName = "my_collection"; FieldSchema vectorField = new FieldSchema.Builder("vector", DataType.FLOAT_VECTOR, 128).build(); CollectionMapping collectionMapping = new CollectionMapping.Builder(collectionName, Arrays.asList(vectorField)).build(); Response createCollectionResponse = client.createCollection(collectionMapping); if (!createCollectionResponse.ok()) { System.out.println("创建Milvus集合失败:" + createCollectionResponse.getMessage()); return; } // 插入向量数据 List<FloatVector> vectors = Arrays.asList( new FloatVector(Arrays.asList(0.1f, 0.2f, 0.3f)), new FloatVector(Arrays.asList(0.4f, 0.5f, 0.6f)), new FloatVector(Arrays.asList(0.7f, 0.8f, 0.9f)) ); InsertParam insertParam = new InsertParam.Builder(collectionName, vectors).build(); Response insertResponse = client.insert(insertParam); if (!insertResponse.ok()) { System.out.println("插入向量数据失败:" + insertResponse.getMessage()); return; } // 查询相似的向量 List<FloatVector> queryVectors = Arrays.asList( new FloatVector(Arrays.asList(0.2f, 0.3f, 0.4f)) ); SearchParam searchParam = new SearchParam.Builder(collectionName, queryVectors, 1).build(); Response searchResponse = client.search(searchParam); if (!searchResponse.ok()) { System.out.println("查询相似的向量失败:" + searchResponse.getMessage()); return; } // 打印查询结果 SearchResult searchResult = searchResponse.getSearchResult(); List<List<SearchResult.VectorData>> vectorDataList = searchResult.getVectorDataList(); for (List<SearchResult.VectorData> vectorData : vectorDataList) { for (SearchResult.VectorData data : vectorData) { System.out.println("相似的向量:" + data.getVector()); System.out.println("相似度:" + data.getDistance()); } } // 断开与Milvus服务器的连接 Response disconnectResponse = client.disconnect(); if (!disconnectResponse.ok()) { System.out.println("断开与Milvus服务器的连接失败:" + disconnectResponse.getMessage()); return; } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值