学习如何使用 TNTSearch 驱动程序与 Laravel Scout

发布于 作者:

Learn how to use the TNTSearch driver with Laravel Scout image

Laravel Scout 为您的 Eloquent 模型 提供了一个简单、基于驱动程序的解决方案,用于添加全文搜索功能。

开箱即用,Laravel 5.3 附带 Algolia 驱动程序。但是,我们可以轻松编写自定义驱动程序;TeamTnt 正是通过为 Laravel Scout 提供 TNTSearch 驱动程序 来实现这一点。

入门

首先,让我们安装一个新的 Laravel 5.3 副本,我使用的是 Laravel 安装程序,因此

laravel new scout-tntsearch

现在,让我们安装运行 Scout 和 TntSearch 所需的包。首先安装 Laravel Scout

composer require laravel/scout

然后,安装 TNTSearch 驱动程序

composer require teamtnt/laravel-scout-tntsearch-driver

接下来,我们将把 **ScoutServiceProvider** 和 **TNTSearchScoutServiceProvider** 添加到 **config/app.php** 中的 providers 数组中

'providers' => [
/*
* Package Service Providers...
*/
Laravel\Scout\ScoutServiceProvider::class,
TeamTNT\Scout\TNTSearchScoutServiceProvider::class,
]

现在,让我们发布 Laravel Scout 配置文件

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

一个新的配置文件 **scout.php** 应该在我们的配置目录中可用。让我们正确设置配置,以便 Scout 知道我们想要使用 TntSearch 驱动程序而不是 Algolia。

在我们的 **.env** 文件中,我们将添加以下内容

SCOUT_DRIVER=tntsearch

接下来,在 **config/scout.php** 中,我们将添加以下内容

'tntsearch' => [
'storage' => storage_path(),
],

这实际上指定了索引文件将存储的目录。

我们现在已经成功地使用 Laravel Scout 和 TNTSearch 驱动程序配置了我们的应用程序,并且可以开始搜索我们的 Eloquent 模型了。

创建数据库

我们的 App 数据库目前不包含任何数据,我们需要一个实际的数据库来测试我们的应用程序。因此,让我们从 MySQL 获取示例 Sakila film 数据库,它是一个示例数据库,旨在提供可用于示例的标准模式。然后将其导入到我们的应用程序数据库中。

现在,我们有一些数据可以测试 Laravel Scout 的一些功能。让我们为 film 表创建一个 Eloquent 模型。

php artisan make:model Models/Film

我们将在我们的模型上设置 **primaryKey** 和 **table** 属性,以便 Eloquent 知道为这些值使用什么。

现在,我们有了 film 表的 Eloquent 模型,让我们看看是否可以用它查询一些数据。

我们的 film 表包含 **1000** 条记录,因此是开始测试 Laravel Scout 和 TntSearch 功能的完美起点。

模型索引

从 Laravel 文档中,我们阅读到以下内容:“每个 Eloquent 模型都与给定的搜索“索引”同步,该索引包含该模型的所有可搜索记录。换句话说,您可以将每个索引视为一个 MySQL 表。默认情况下,每个模型将被持久化到与模型的典型“表”名称匹配的索引中。通常,这是模型名称的复数形式;但是,您可以通过覆盖模型上的 searchableAs 方法来自定义模型的索引:”

好的,所以首先我们将把 **Searchable** 特性添加到我们的模型中,然后我们将自定义要创建和保存的索引名称。此索引将用于执行搜索,而不是查询数据库,因此我们在执行搜索时会获得更高的速度。

索引

我们首先需要为第一次创建 **Index** 文件。

php artisan scout:import "App\Models\Film"

我们可以清楚地看到 Laravel Scout 如何将数据分块并将其一次导入索引 100 行,从而防止我们的脚本崩溃或超时。如果你问我,这真的很酷!。

现在,我们在存储目录中有一个 **films_index.index** 文件,Laravel Scout 将在对 Film 模型执行搜索时使用它。

现在你可能会问自己,当我更新 film 表时会发生什么,我是否需要再次导入数据并重新创建索引?不,Laravel Scout 已经在您更新模型时负责更新索引。即当您创建新记录、更新记录和删除记录时。

使用 TNT Search 搜索

我们现在可以使用 **Searchable** 特性提供的 **search** 方法搜索我们的模型。

App\Models\Film::search('ANGELS LIFE')->get();

我们获得了 3 个结果,所有结果的标题中都包含我们已指定给搜索方法的某些关键字。告别 WHERE LIKE %% 查询。

还要注意,在搜索期间将使用所有已索引的字段,因此包括描述、发行年份等等。

返回这些结果的速度简直令人惊叹,因此当您需要搜索大量数据时,它将真正提升您的应用程序性能。

最后的话

我真的很推荐使用 Laravel Scout 来查询大型数据库,这将是它最有用和强大的地方。确保您也查看了 Laravel Scout 官方文档,那里有一些非常酷的东西可以学习。

我还将此演示的代码发布到了 GitHub 上,您可以查看它以作参考。

Percy Mamedy photo

只是一个热爱 Laravel 和 VueJs 的人...

归档于
Cube

Laravel 新闻稿

加入 40,000 多名其他开发者,永远不要错过新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发者必备的代码运行器。使用 AI、自动完成和本地和生产环境上的即时反馈进行 Tinker。

Tinkerwell
No Compromises logo

无妥协

Joel 和 Aaron,两位来自 No Compromises 播客的经验丰富的开发者,现在可以为您的 Laravel 项目聘用。 ⬧ 固定价格为 7500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

无妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

只需 2500 美元/月,即可让经验丰富的 Laravel 开发者(拥有 4-6 年经验)为您的项目注入活力。获得 160 小时的专业知识和 15 天的无风险试用。立即安排通话!

Bacancy
Lucky Media logo

Lucky Media

现在就来体验 Lucky - Laravel 开发的理想选择,拥有超过十年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的力量带到 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动工具包

SaaSykit 是一款 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。包括支付、精美结账页面、管理面板、用户仪表盘、身份验证、即用型组件、统计信息、博客、文档等等。

SaaSykit: Laravel SaaS 启动工具包
Rector logo

Rector

您的 Laravel 无缝升级合作伙伴,帮助您降低成本,加速创新,助力企业成功。

Rector
MongoDB logo

MongoDB

通过将 MongoDB 和 Laravel 強大整合,提升您的 PHP 应用程序,使开发者能够轻松高效地构建应用程序。支持事务、搜索、分析和移动应用场景,同时使用熟悉的 Eloquent API。探索 MongoDB 如何以其灵活的现代数据库来改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一款简单的零依赖输入掩码库。

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章