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
相关产品推荐
相关产品推荐

