这类问题我又碰上了一次。Meilisearch 1.9.1 上直接调 /multi-search,body 里带 hybrid: {semanticRatio: 0.5, embedder: "default"},返回 400 The provided embedder `default` is not configured,索引里已经有 documents 和向量字段。

第一反应是「embedder 的 source 必须与 apiKey、model 配套填写」,验证下来不成立。

排查方向其实有限,先把可能性排一排。embedders 设置没写,默认不会创建名为 default 的配置;1.9 需要显式开启 vector 实验特性后才认 hybrid 参数;设置改完没有触发 reindex,文档里还是没有向量。

上来先看索引当前的 embedders 配置

curl -s 'http://localhost:7700/indexes/docs/settings/embedders' -H 'Authorization: Bearer masterKey'

再往下写入一个 openAi 类型的 embedder

curl -X PATCH 'http://localhost:7700/indexes/docs/settings/embedders' -H 'Authorization: Bearer masterKey' -H 'Content-Type: application/json' -d '{"default":{"source":"openAi","apiKey":"sk-xxx","model":"text-embedding-3-small","documentTemplate":"{{doc.title}} {{doc.body}}"}}'

触发一次重建索引

curl -X POST 'http://localhost:7700/indexes/docs/documents' -H 'Authorization: Bearer masterKey' -H 'Content-Type: application/json' --data-binary @docs.json

末了用 hybrid 搜索验证返回 _semanticScore

curl -X POST 'http://localhost:7700/indexes/docs/search' -H 'Authorization: Bearer masterKey' -H 'Content-Type: application/json' -d '{"q":"退款","hybrid":{"semanticRatio":0.5,"embedder":"default"},"limit":5}'

同事提醒我看一下最近一次发布,时间点确实对得上。

命令输出我都留了记录,免得改完记不清原来的值。

恢复的判定其实很直接。搜索返回 200,命中项带 _semanticScore 字段,把 semanticRatio 从 0 调到 1 时排序明显变化。

提醒一点。embedder 是索引级设置而不是全局开关,写完要确认任务队列里的 reindex 已经完成,否则新文档有向量、老文档没有,混合排序会偏向一边。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189