用webman-search插件集成meilisearch必须改三处:显式配置'driver' => 'meilisearch'、补全locales中文支持、设置合法api_key;否则90%搜索请求在生产环境失败。

webman-search 插件能快速对接 MeiliSearch,但默认不启用中文分词、不设主密钥校验、不处理连接超时——直接照搬配置上线,90% 的搜索请求会在生产环境失败。
用 webman-search 插件集成 MeiliSearch 必须改这三处
插件本身是抽象层,不是开箱即用的完整方案。它把底层差异屏蔽了,但也把关键控制权交给了你。
-
'driver' => 'meilisearch'要显式写在config/plugin/shopwwi/search/app.php里,否则默认走xunsearch -
'host'必须带协议和端口,比如'http://127.0.0.1:7700';写成'127.0.0.1:7700'会触发 Guzzle 的 URI 解析错误Invalid URI: must contain a scheme -
'api_key'字段不能留空,即使本地开发也建议设为'devkey';否则调用search:create:index时会报401 Unauthorized
MeiliSearch 中文搜索失效?不是插件问题,是没开 locales
MeiliSearch v1.8+ 默认只启用英文分词,中文字段必须手动开启语言支持,否则搜“电影”返回空,搜“movie”却有结果。
- 创建索引后立刻执行:
$client->index('movies')->updateSettings(['locales' => ['zh']] ) - 如果用
webman search:create:index命令初始化,它不会自动加locales,得补一条命令或写进迁移脚本 - 验证是否生效:查
http://127.0.0.1:7700/indexes/movies/settings,确认返回里有"locales": ["zh"]
PHP 进程连不上 MeiliSearch?先看 Docker 网络和 Windows 防火墙
尤其在 phpEnv 或 WSL 环境下,localhost 对 PHP 和对 Docker 来说根本不是同一个地址。
- Docker Desktop for Windows 下,
phpEnv的 Apache 进程访问http://localhost:7700是连不到容器内 MeiliSearch 的,必须改用http://host.docker.internal:7700 - Windows 自带防火墙常拦截 7700 端口,启动容器后执行
netsh advfirewall firewall add rule name="MeiliSearch" dir=in action=allow protocol=TCP localport=7700 - 别信
curl http://127.0.0.1:7700/health成功就代表 PHP 能通——那是 cmd 环境,PHP 进程可能跑在不同网络命名空间里
search:update:index 不生效?因为 MeiliSearch 的 settings 是异步持久化的
执行完命令返回 uid: 123 并不等于设置已生效,中间有几秒延迟。直接跟一个 search:import,大概率导入的文档没按新规则分词。
- 必须轮询
/indexes/{name}/updates/{uid}直到status: "succeeded" - 或者加个简单等待:
usleep(3_000_000)(3 秒),再继续后续操作 - 更稳妥的做法是封装成一个
syncUpdateSettings()方法,在 Webman 的command或service里复用
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











