JedisDataException:Error parsing vector similarity query: query vector blob size (4096) does not mat

记录一次bug排除

bug信息

报错日志信息

redis.clients.jedis.exceptions.JedisDataException: Error parsing vector similarity query: query vector blob size (4096) does not match index's expected size (12).
	at redis.clients.jedis.Protocol.processError(Protocol.java:105)
	at redis.clients.jedis.Protocol.process(Protocol.java:162)
	at redis.clients.jedis.Protocol.read(Protocol.java:221)
	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:350)
	at redis.clients.jedis.Connection.getOne(Connection.java:332)
	at redis.clients.jedis.Connection.executeCommand(Connection.java:137)
	at redis.clients.jedis.executors.DefaultCommandExecutor.executeCommand(DefaultCommandExecutor.java:24)
	at redis.clients.jedis.UnifiedJedis.executeCommand(UnifiedJedis.java:250)
	at redis.clients.jedis.UnifiedJedis.ftSearch(UnifiedJedis.java:3702)
	at org.springframework.ai.vectorstore.RedisVectorStore.similaritySearch(RedisVectorStore.java:374)

出现场景

使用spring-ai 查询redis中的向量时出现以上报错信息。

解决办法

重新删除redis中的索引之后,重新加载数据即可。

bug分析
  • 查看报错信息

中文解释是向量相似度查询解析失败:查询向量字节大小是4096,不匹配索引预期的大小12.

  • 拿着错误信息到网络搜索答案

要善于利用网络的力量,每个人的精力都是有限的。节约出时间可以做其他你想做的事情。经过一番搜索没有找到有用的信息。

  • 深入分析错误信息,规划排查策略

通过错误提示可以知道,是索引问题与查询问题的大小不匹配。现在就需要查看索引大小和查询向量分别是什么
** 通过redis客户端查看到dim是3。*黑人问号 提示信息上说是12,这边为什么是3呢?先不管。继续看查询向量字节是是怎么算出来的
**查看Java源码,发现原来是数组长度X4计算出来的。搜嘎这样看来,索引大小应该也是这种方式计算出来的了。
附上代码:

		private static float[] toFloatArray(List<Double> embeddingDouble) {
		float[] embeddingFloat = new float[embeddingDouble.size()];
		int i = 0;
		for (Double d : embeddingDouble) {
			embeddingFloat[i++] = d.floatValue();
		}
		return embeddingFloat;
	}

** 现在已经确定是由于dime不匹配的原因导致的。那么是在哪里设置的dime呢?这个有兴趣的同学可以自己探索一下。这边我们只要把索引删除掉,重新载入数据即可。

总结

遇到问题不要慌。仔细分析。如果实在搞不定可以请其他同事帮忙,毕竟人多力量大嘛。如果你觉得文章帮助到了你,请点赞收藏关注。谢谢。

附录

  • keys * 查看所有的key
  • TYPE key 查看key的类型
  • FT._LIST 查看现有索引
  • JSON.GET key 查看json类型的字段数据
  • flushdb 清空数据库
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值