You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Scout搭配Meilisearch如何实现多搜索词全匹配过滤结果

解决方案

你需要的功能可以通过修改Meilisearch的*匹配策略(matchingStrategy)*实现:Meilisearch默认使用last匹配策略,仅要求匹配搜索词的最后一个词即可返回结果,将其修改为all策略就会要求返回的结果必须同时匹配所有搜索词。

原生Meilisearch调用实现

调用搜索接口时直接传入matchingStrategy参数即可,示例请求参数:

{
  "q": "the world",
  "matchingStrategy": "all"
}

Laravel Scout对接实现

1. 单次搜索生效

在调用search方法时通过自定义回调添加参数:

$searchResult = 对应模型::search('the world', function ($client, string $query, array $options) {
    $options['matchingStrategy'] = 'all';
    return $client->search($query, $options);
})->get();

2. 全局默认生效

修改config/scout.php配置文件中的Meilisearch配置段,添加全局默认匹配策略:

'meilisearch' => [
    'host' => env('MEILISEARCH_HOST', 'http://127.0.0.1:7700'),
    'key' => env('MEILISEARCH_KEY', ''),
    'matching_strategy' => 'all', // 新增该行配置
],

修改完成后搜索the world就只会返回同时包含两个搜索词的结果,符合你预期的仅返回The World、World, The两条记录的需求。如果遇到the这类常用词被过滤的情况,调整Meilisearch的停用词列表,移除不需要过滤的词即可,不会影响匹配策略的生效。


内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:06:03