Weaviate 1.25 的 nearText 查询里加 distance: 0.7,返回 objects 是空数组,去掉这个参数能拿到 10 条,结果里的 distance 在 0.18 到 0.26 之间,改成 0.3 又只剩两条,换 certainty 0.7 同样为空。

排查方向其实有限,先把可能性排一排。distance 是距离 越小越相似 不是相似度;集合的 distance 配成 dot 值域与 cosine 不同;certainty 已废弃仍被当成阈值使用;where 过滤与 nearText 同时生效结果被二次收窄。

不带阈值看真实的距离分布

curl -s http://localhost:8080/v1/graphql -H "content-type: application/json" -d '{"query":"{Get{Policy(nearText:{concepts:[\"退货\"]},limit:10){title _additional{distance}}}}"}'

随后按分布把阈值放到 0.3 再查

curl -s http://localhost:8080/v1/graphql -H "content-type: application/json" -d '{"query":"{Get{Policy(nearText:{concepts:[\"退货\"],distance:0.3},limit:10){title}}}"}'

接着确认集合的向量距离类型

curl -s http://localhost:8080/v1/schema/Policy | jq '.vectorIndexConfig.distance'

等前面都确认过,再逐条打印 distance 排序核对

python check_dist.py --class Policy --query 退货 --limit 10

同一份数据我导出了两份,一份留底,一份拿来试。

这类问题以前遇到过,但这次的触发条件和上次不一样。

改完先别撤,确认这几项。阈值 0.3 时稳定返回 8 到 10 条,人工判断前三条都与退货相关,空结果不再出现。

换 distance 类型必须重建集合并重新导入向量,改配置不会影响已经写入的数据。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189