Json 转换导致的向量库 Milvus 错误:Type mismatch for field ‘docEmbed‘: Float vector field‘s value type must be

我的业务逻辑是这样的

在这里插入图片描述

用户上传文件,出了将文件向量化之外,还会存储一份到 mysql 中。

我知道不应该直接将向量存储 mysql,这是我后面意识到的,重要的是过程中遇到的问题

但是当我从数据库中取出向量,打算插入 milvus 向量集合中却发生报错!

我百思不得其解,为什么呢?

我通过 JSON.toString() 将向量转换为了字符串存储数据库,然后又从数据库中取出转换成 List<List> 存储向量中,怎么会出错呢?

经过不断调试,重启,deBug,打印日志,最后发现是这个方法导致的:

public static <T> List<List<T>> convertJsonToListOfListOfGeneric(String jsonString) {
		// 使用TypeReference定义List<List<T>>的类型
		return JSON.parseObject(jsonString, new TypeReference<List<List<T>>>() {});
}

改成如下即可解决问题:

public static List<List<Float>> convertJsonToListOfListOfFloat(String jsonString) {
		// 使用TypeReference定义List<List<T>>的类型
		return JSON.parseObject(jsonString, new TypeReference<List<List<Float>>>() {});
}

为什么呢?

因为第一个方法中的 T 是一个泛型类型参数,运行时它会被擦除,导致 Fastjson 无法正确地反序列化 JSON 字符串到 List<List>。

修正后的方法明确指定了 Float 类型,这样 Fastjson 就有了必要的信息来正确地将 JSON 字符串反序列化为浮点数的列表的列表(List<List>)。通过指定具体的类型,您解决了因类型擦除导致的序列化问题。

https://shushiai.com/

https://rednutmeg.top/aigc_web

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值