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

Laravel应用中Algolia短语搜索匹配所有单词能否配置?

多词搜索逻辑配置方案

一、Laravel Scout 端配置(config/scout.php)

模型级别自定义

在需要调整搜索逻辑的模型中,通过重写搜索方法或动态添加查询参数,修改Algolia的搜索规则:

use Laravel\Scout\Searchable;

class YourModel extends Model
{
    use Searchable;

    public static function search($query)
    {
        // 让所有单词变为可选,实现OR逻辑
        return parent::search($query)->query([
            'optionalWords' => '*',
            'queryType' => 'prefixLast', // 可选:最后一个词支持前缀匹配
        ]);
    }
}

或者在调用搜索时临时指定参数:

$results = YourModel::search('词1 词2')->query(['optionalWords' => '*'])->get();

全局默认配置

如果要让所有模型的搜索都生效,在config/scout.php的algolia配置段中添加默认搜索参数:

'algolia' => [
    'id' => env('ALGOLIA_APP_ID', ''),
    'secret' => env('ALGOLIA_SECRET', ''),
    'prefix' => env('ALGOLIA_PREFIX', ''),
    'suffix' => env('ALGOLIA_SUFFIX', ''),
    'settings' => [
        'defaultSearchParameters' => [
            'optionalWords' => '*',
            'queryType' => 'prefixLast',
        ],
    ],
],

修改后执行php artisan config:clear清除配置缓存,使改动生效。

二、Algolia 后台配置

登录Algolia后台,找到目标索引的「配置」→「搜索参数」面板:

  • Query type:选择prefixLast(仅最后一个词支持前缀匹配)或prefixAll(所有词支持前缀匹配)
  • Optional words:输入*,表示所有空格分隔的单词都是可选条件,此时搜索会匹配包含任意一个单词的记录
  • 开启Advanced syntax后,用户还可以手动用|表示OR逻辑,+表示AND逻辑,比如词1 | 词2

如果需要精确匹配完整短语,让用户搜索时用双引号包裹内容即可,例如"词1 词2"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:13:28