我的业务逻辑是这样的
用户上传文件,出了将文件向量化之外,还会存储一份到 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