Milvus向量数据库(一)Milvus存储byte[]类型源向量数据

两种路线:

  • 第一种是把byte[]转换为List< float >,然后存储到Milvus的floatVector中
  • 第二种是把byte[]转换为ByteBuffer,然后存储到Milvus的BinaryVector中

步骤:

  • 我先用的是第一种,但是在转换float过程中,报错NaN,某些数据无法转换,于是换第二种,伪代码如下
java 复制代码
	//创建集合
	...
	//设置向量字段
	FieldType fieldType = FieldType.newBuilder()
                .withName("feature")
                .withDataType(DataType.BinaryVector)
                .withDimension(8256)
                .build();
    ...

	// 获取数据
	byte[] featureData= ...;
	// 转换数据
    ByteBuffer byteBuffer = ByteBuffer.wrap(featureData);
    // 注意这里修改position,不然会报错
    byteBuffer.position(byteBuffer.capacity());
    // 插入准备
    List<ByteBuffer> vector = new ArrayList<>();
    vector.add(byteBuffer);
    List<InsertParam.Field> fields = new ArrayList<>();
    fields.add(new InsertParam.Field("feature",vector));
	// 插入数据
	InsertParam insertParam = InsertParam.newBuilder()
          .withCollectionName(collection_name)
          .withFields(fields)
          .build();

    R<MutationResult> mutationResultR = milvusClient.insert(insertParam);

报错:Incorrect dimension for field 'feature': the no.0 vector's dimension: 0 is not equal to field's dimension: 1032

  • 解决思路:先百度谷歌,然后没找到解决办法,于是看报错位置,查源码,定位报错原因,如下
  • 然后发现byte[]在经过ByteBuffer byteBuffer = ByteBuffer.wrap(featureData);这段代码转换时,position被默认设置为0,因此加入byteBuffer.position(byteBuffer.capacity());修改position值
  • 还有需要注意的是设置该字段的向量维度时,需要设置为byte[]的长度乘以8
相关推荐
Nick_zcy7 分钟前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi
*Lisen13 分钟前
从零手写 FlashAttention(PyTorch实现 + 原理推导)
人工智能·pytorch·python
猫的玖月15 分钟前
(一)MY SQL概述
数据库·sql
用户83562907805129 分钟前
用 Python 轻松在 Excel 工作表中应用条件格式
后端·python
red1giant_star34 分钟前
Python根据文件后缀统计文件大小、找出文件位置(仿Everything)
后端·python
雷欧力1 小时前
如何使用 Claude API?3 种接入方案实测,附完整代码(2026)
python·claude
脑子进水养啥鱼?1 小时前
PostgreSQL .history 文件
数据库·postgresql
神仙别闹1 小时前
基于 Python 实现 BERT 的情感分析模型
开发语言·python·bert
NQBJT1 小时前
VS Code配置Python人工智能开发环境
开发语言·人工智能·vscode·python
浮游本尊1 小时前
一文讲透巡检链路:采集程序 → 上传数据包 → 后端解析入库 → 分析出报告
python