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
相关推荐
ZhengEnCi8 分钟前
M1-如何转换为HTML
python·html
脚大江山稳14 分钟前
单独为mysql数据库的某个库创建用户
android·数据库·mysql
科学创新前沿14 分钟前
逆向设计新范式:深度学习驱动的声学超材料智能优化!
人工智能·python·深度学习·声学·逆向设计·声学超材料
LSL666_20 分钟前
MybatisPlus——通用枚举
数据库·mybatisplus
Sagittarius_A*32 分钟前
传统图像分割:阈值 / 区域生长 / 分水岭 / 图割全解析【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉·图像分割
猫咪老师33 分钟前
Day4 Python的函数和参数机制
后端·python
golang学习记41 分钟前
Go 实时批处理:让数据库少挨点打 [特殊字符]
开发语言·数据库·golang
wang09071 小时前
Linux性能优化之平均负载
linux·数据库·性能优化
电商API&Tina1 小时前
比价 / 选品专用:京东 + 淘宝 核心接口实战(可直接复制运行)
大数据·数据库·人工智能·python·json·音视频
love530love1 小时前
Windows 开源项目部署评估与决策清单(完整版)
人工智能·windows·python·开源·github