问题出现得很突然,日志倒是留得挺全。Milvus 2.4 的 collection 刚 create 完就调 create_index,报 index not found,重试十几次偶尔成功,SDK 是 pymilvus 2.4.4。

刚开始盯着「rootcoord 的元数据同步有延迟」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。集合还没完成 load,元数据里查不到索引。也可能是索引名与之前 drop 掉的旧索引冲突。

不容易想到的是,用了异步接口但没有等 future 完成。

先查集合状态和已有索引

python -c "from pymilvus import Collection;c=Collection('docs');print(c.indexes)"

然后等 load_state 变成 Loaded 再建索引

python -c "from pymilvus import Collection,utility;print(utility.load_state('docs'))"

随后换一个新的索引名避免冲突

python -c "from pymilvus import Collection;c=Collection('docs');print(c.create_index('embedding','idx_v2',{'index_type':'HNSW','metric_type':'COSINE','params':{'M':16,'efConstruction':128}}))"

末了看 rootcoord 日志确认元数据是否落盘

kubectl logs deploy/milvus-rootcoord -n milvus | Select-String index

中途换过一次思路,把范围缩到最小的那一层,反而快了。

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

别只看报错消失,验证要多做一步。create_index 一次成功,describe_index 能查到 HNSW 参数,搜索接口返回结果且召回与建索引前一致。

提醒一点。建索引前要确认集合已经 load 完成,异步 SDK 的 future 不 await,等于建了个寂寞。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189