事情本身不复杂,线索都在日志里。知识库更新流程只更新了标题字段,正文没变就跳过重算,用户搜新标题搜不到,搜旧标题还能命中,索引里存的还是旧标题拼出来的向量文本,接口全程返回 200。

第一反应是「索引里的元数据与向量不同步」,验证下来不成立。

排查方向其实有限,先把可能性排一排。向量文本由标题加正文拼接,只更新了标题。另一种情况是更新逻辑判断正文 hash 未变就直接跳过。

不容易想到的是,缓存键按文档 id 命中,取到的还是旧向量。

动手时先确认向量文本里到底拼了哪些字段

python -c "print(open('doc.json').read()[:120])"

标题变更时强制重算向量

python reindex.py --doc 12 --on-title-change

然后删旧向量再写入,避免残留

curl -X POST http://10.0.0.8:6333/collections/kb/points/delete -d @del.json

等前面都确认过,再用新标题检索验证命中

python search.py --q 新版退货流程

怎么算真的好了,看的是同一批现象。新标题能在前三条命中,旧标题不再返回该文档,向量文本与当前字段完全一致。

只要向量文本里包含的字段变了就得重算,判断条件要按参与拼接的全部字段算,不是只看正文。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189