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 Events & Listeners解耦应用的实战教程  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何注册花生壳免费域名并搭建个人网站?  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel如何使用查询构建器?(Query Builder高级用法)  如何挑选优质建站一级代理提升网站排名?  Laravel如何使用Eloquent进行子查询  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  如何确保西部建站助手FTP传输的安全性?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  node.js报错:Cannot find module 'ejs'的解决办法  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  轻松掌握MySQL函数中的last_insert_id()  javascript日期怎么处理_如何格式化输出  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  nodejs redis 发布订阅机制封装实现方法及实例代码  iOS发送验证码倒计时应用  Android滚轮选择时间控件使用详解  linux top下的 minerd 木马清除方法  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Python结构化数据采集_字段抽取解析【教程】  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  如何在云指建站中生成FTP站点?  SQL查询语句优化的实用方法总结  微信小程序 require机制详解及实例代码  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何在阿里云高效完成企业建站全流程?  浅谈Javascript中的Label语句  海南网站制作公司有哪些,海口网是哪家的?  中山网站制作网页,中山新生登记系统登记流程?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  文字头像制作网站推荐软件,醒图能自动配文字吗?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  iOS验证手机号的正则表达式  Laravel如何处理异常和错误?(Handler示例)  常州企业网站制作公司,全国继续教育网怎么登录?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  如何挑选最适合建站的高性能VPS主机?  如何快速搭建个人网站并优化SEO?