Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程

发布时间 - 2025-12-09 00:00:00    点击率:
Laravel Scout支持Algolia和Meilisearch实现全文搜索。1. 安装Scout并发布配置文件;2. 配置.env中的驱动和密钥;3. 模型引入Searchable trait;4. 导入数据并执行搜索;5. 可自定义索引字段和禁用同步。

在Laravel项目中实现高效的全文搜索,Laravel Scout 是官方推荐的解决方案。它为模型提供了简单、优雅的全文搜索支持,底层可集成 Algolia 或 Meilisearch 等搜索引擎。本文将指导你如何使用 Laravel Scout 集成 Algolia 和 Meilisearch,完*文搜索功能。

安装与配置 Laravel Scout

Laravel Scout 可通过 Composer 安装:

composer require laravel/scout

安装完成后,发布配置文件:

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

这会在 config/scout.php 生成配置文件。默认驱动是 "algolia",你可以根据需要切换为 "meilisearch"。

使用 Scout 集成 Algolia

Algolia 是一个强大的云端搜索服务,适合需要高性能搜索的应用。

1. 配置 Algolia 凭据

前往 Algolia 官网 注册并获取你的 Application ID 和 Admin API Key。然后在 .env 文件中配置:

SCOUT_DRIVER=algolia
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SECRET=your_admin_key
2. 为模型启用搜索功能

在需要搜索的 Eloquent 模型中引入 Searchable trait:

use Laravel\Scout\Searchable;

class Post extends Model
{
use Searchable;
}

该模型的数据将自动同步到 Algolia。

3. 导入已有数据

若数据库中已有数据,需将其导入 Algolia:

php artisan scout:import "App\Models\Post" 4. 执行搜索

在控制器或路由中使用搜索方法:

$results = App\Models\Post::search(' Laravel ')->get();

你也可以分页显示结果:

$results = App\Models\Post::search(' Laravel ')->paginate(15);

使用 Scout 集成 Meilisearch

Meilisearch 是开源、轻量且易于部署的搜索引擎,适合自托管项目。

1. 启动 Meilisearch 服务

使用 Docker 快速启动:

docker run -it -p 7700:7700 getmeili/meilisearch:latest

默认主键为 masterKey,可在启动时指定:

docker run -it -p 7700:7700 -e MEILI_MASTER_KEY=your_master_key getmeili/meilisearch:latest 2. 安装 Meilisearch PHP 客户端

Scout 默认支持 Meilisearch,但确保已安装:

composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle 3. 配置 .env 文件 SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7700
MEILISEARCH_KEY=your_master_key
4. 在模型中使用 Searchable

与 Algolia 相同,只需引入 trait:

use Laravel\Scout\Searchable;

class Post extends Model
{
use Searchable;
}
5. 导入数据并搜索 php artisan scout:import "App\Models\Post"

执行搜索:

$results = App\Models\Post::search('教程')->get();

自定义索引字段与搜索行为

默认情况下,Scout 会索引模型的所有属性。你可以重写 toSearchableArray() 方法来自定义数据:

public function toSearchableArray()
{
$array = $this->toArray();

return array_only($array, ['title', 'content', 'author.name']);
}

这样可以控制哪些字段被索引,提升性能和相关性。

如果想在保存模型时避免自动更新索引(例如在测试或批量操作时),可使用:

Post::withoutSyncingToSearch(function () {
// 批量创建或更新操作
});
基本上就这些。Laravel Scout 让全文搜索变得简单,选择 Algolia 还是 Meilisearch 取决于你是否愿意托管还是自建服务。两者集成方式相似,切换方便,按项目需求选择即可。


# php  # laravel  # go  # docker  # composer  # app  # ai  # 路由  # 搜索引擎  # 配置文件  # Array  # require  # class  # public  # 并发  # function  # this  # 数据库  # http  # 自定义  # 你可以  # 已有  # 搜索功能  # 是一个  # 只需  # 将其  # 可在  # 分页 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用花生壳三步快速搭建专属网站?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel如何为API生成Swagger或OpenAPI文档  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  原生JS实现图片轮播切换效果  Python3.6正式版新特性预览  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  百度浏览器如何管理插件 百度浏览器插件管理方法  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  微信小程序 require机制详解及实例代码  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  浅谈Javascript中的Label语句  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何快速登录WAP自助建站平台?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Python并发异常传播_错误处理解析【教程】  JavaScript Ajax实现异步通信  Laravel如何配置Horizon来管理队列?(安装和使用)  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  lovemo网页版地址 lovemo官网手机登录  个人网站制作流程图片大全,个人网站如何注销?  Java解压缩zip - 解压缩多个文件或文件夹实例  Python文件流缓冲机制_IO性能解析【教程】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  如何在IIS服务器上快速部署高效网站?  重庆市网站制作公司,重庆招聘网站哪个好?  详解Android图表 MPAndroidChart折线图  如何挑选最适合建站的高性能VPS主机?  大连 网站制作,大连天途有线官网?  Android实现代码画虚线边框背景效果  如何用PHP快速搭建高效网站?分步指南  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何在云指建站中生成FTP站点?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Laravel如何使用Vite进行前端资源打包?(配置示例)  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  EditPlus 正则表达式 实战(3)  如何在建站主机中优化服务器配置?  HTML 中如何正确使用模板变量为元素的 name 属性赋值