Laravel Scout提供轻量级全文搜索方案:先安装配置驱动,再为模型添加Searchable trait并同步索引,接着导入历史数据,最后通过search()方法执行带条件、分页的搜索;使用database驱动时需手动添加FULLTEXT索引。

如果您在Laravel应用中需要为模型数据实现高效、响应迅速的全文搜索功能,则Scout提供了一种轻量级、驱动无关的解决方案。以下是实现Scout全文搜索的具体方法:
一、安装与基础配置
Scout作为Laravel官方扩展包,需先通过Composer引入,并发布配置文件以启用搜索驱动。默认使用Algolia驱动,但也可切换为本地驱动(如Meilisearch或Database引擎)。
1、执行命令安装scout包:composer require laravel/scout。
2、运行Artisan命令发布配置文件:php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"。
3、在.env文件中设置SCOUT_DRIVER变量,例如使用数据库驱动:SCOUT_DRIVER=database。
二、模型可搜索化配置
要使Eloquent模型支持Scout搜索,需添加Searchable trait并确保模型字段已同步至搜索索引。该trait自动监听模型事件,在创建、更新、删除时触发索引操作。
1、在目标模型(如App\Models\Post)顶部引入trait:use Laravel\Scout\Searchable;。
2、在模型类定义中添加trait声明:use Searchable;。
3、若需自定义索引字段,重写toSearchableArray()方法,返回指定键值数组。
三、初始化索引数据
首次启用Scout时,已有数据不会自动进入搜索索引,必须手动导入。此步骤将数据库中符合条件的记录批量写入所选驱动的索引存储中。
1、运行导入命令,同步全部可搜索模型:php artisan scout:import "App\Models\Post"。
2、如需清空现有索引再重新导入,先执行:php artisan scout:flush "App\Models\Post"。
3、确认索引状态可通过查询Scout内置的search()方法返回结果数量进行验证。
四、执行搜索查询
Scout将搜索逻辑封装为链式调用接口,支持模糊匹配、布尔条件及分页,无需编写原始SQL或复杂查询构造器。
1、在控制器中调用模型的search()方法并传入关键词:$posts = Post::search('Laravel')->get();。
2、添加where约束以结合数据库条件筛选:$posts = Post::search('Scout')->where('status', 1)->get();。
3、对搜索结果进行分页处理:$posts = Post::search('全文')->paginate(15);。
五、使用Database驱动的特殊配置
当选用database驱动时,Scout会利用MySQL或PostgreSQL的全文索引能力,需确保对应字段已建立FULLTEXT索引,否则搜索性能将显著下降。
1、在迁移文件中为搜索字段添加FULLTEXT索引(MySQL示例):->fullText(['title', 'content'])。
2、执行迁移命令使索引生效:php artisan migrate。
3、在config/scout.php中确认database驱动下的prefix和chunk配置符合当前环境要求。










