RediSearch 2.10 建向量索引时把 DIM 写成 1024,实际 embedding 是 768 维,写入时没有报错,KNN 查询直接返回 Vector dimension mismatch。

真正麻烦的地方在于,几个原因的现象几乎一样。索引维度与模型输出的维度不一致;写入侧不校验长度,脏数据也能进;中途换过 embedding 模型但没重建索引;索引已存在,重复创建被忽略。

上来先用 FT.INFO 看索引的实际维度

redis-cli FT.INFO idx:docs | grep -A2 DIM

接着抽查写入向量的实际长度

python -c "import struct;b=open('vec.bin','rb').read();print(len(b)//4)"

再往下删掉索引按 768 维重建

redis-cli FT.DROPINDEX idx:docs DD

等前面都确认过,再重新灌数据后用一条 KNN 查询验证

redis-cli FT.SEARCH idx:docs '*=>[KNN 3 @v $q]' PARAMS 2 q "$(cat q.bin)" DIALECT 2

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

改完先别撤,确认这几项。KNN 查询返回正常结果,FT.INFO 里的 DIM 与模型输出一致,写入没有失败记录。

向量索引的维度是建索引时固定的,换模型必须重建,写入侧加一条长度断言能提前暴露问题。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189