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=algoliaALGOLIA_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=meilisearchMEILISEARCH_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 属性赋值

