问题出现得很突然,日志倒是留得挺全。Milvus 2.5.3 standalone 跑在 Docker 里,pymilvus 2.5.4,建表时把正文列设成 VARCHAR(8000),再建 Function 做 BM25 全文检索,查询阶段报 400,原文是 field content should enable analyzer。建表和插数据都成功了,只有带 Function 的检索这一步失败。

刚开始盯着「analyzer 参数写在了 collection 层而不是字段层」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。VARCHAR 字段建表时没开 enable_analyzer。也可能是Function 的输入输出字段名和 schema 对不上。

另外,服务端与客户端小版本不一致,参数被静默丢掉。

上来先打印 collection schema,看字段有没有分析器配置

python -c "from pymilvus import MilvusClient;c=MilvusClient(uri='http://localhost:19530');print([f.name for f in c.describe_collection('docs')['fields']])"

新建 collection 时在 VARCHAR 字段上显式开 analyzer

python create_collection.py --with-analyzer --field content --analyzer standard

建 BM25 函数并指定输入输出字段

python create_function.py --type BM25 --in content --out sparse

插少量数据后跑一次全文检索验证

python search.py --mode fulltext --query '退款流程' --topk 5

怎么算真的好了,看的是同一批现象。检索能按关键词返回命中条数,describe_collection 里 function 与 analyzer 两项都非空。

开了 analyzer 的字段不能直接改,只能新建 collection 再迁数据,动手前把旧表名留一份。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189