报错是这么冒出来的。Typesense 27.1 上用 curl 建 collection,schema 里写了 {"name": "embedding", "type": "float[]", "vec_dist": "cosine"},返回 400 Field `embedding` of type `float[]` must have a `dims` value,补了 dims 又报 vec_dist 不认识。
中间走过弯路,把「旧集合已存在,同名的 PATCH 不会改字段类型」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。float[] 字段必须同时给 dims,键名不是 dimension。还有一种是距离函数键名是 vec_dist,不是 distance 或 metric。
少数情况下是向量维度与写入时的数组长度不一致,导入阶段才报错。
先删掉同名集合再按完整字段重建
curl -X DELETE 'http://localhost:8108/collections/docs' -H 'X-TYPESENSE-API-KEY: xyz'
再往下按 dims 与 vec_dist 重建 schema
curl -X POST 'http://localhost:8108/collections' -H 'X-TYPESENSE-API-KEY: xyz' -H 'Content-Type: application/json' -d '{"name":"docs","fields":[{"name":"embedding","type":"float[]","dims":1024,"vec_dist":"cosine"}]}'
接着写入一条 1024 维向量验证长度
curl -X POST 'http://localhost:8108/collections/docs/documents' -H 'X-TYPESENSE-API-KEY: xyz' -H 'Content-Type: application/json' -d '{"id":"1","embedding":[0.1,0.2]}'
剩下的就是用向量查询确认距离字段返回
curl -X POST 'http://localhost:8108/multi_search' -H 'X-TYPESENSE-API-KEY: xyz' -H 'Content-Type: application/json' -d '{"searches":[{"collection":"docs","q":"*","vector_query":"embedding:([0.1,0.2],k:3)"}]}'
怎么算真的好了,看的是同一批现象。建集合返回 200,字段列表里能看到 dims 1024 与 vec_dist cosine,向量查询返回 vector_distance 且按升序排列。
容易忽略的是,Typesense 的字段定义一旦建成就不能改类型,维度写错只能删集合重来,上线前先用一条真实向量跑通写入比事后补救便宜。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
