首页 » PHP教程 » mysqlphp隐约搜刮技巧_3分钟短文Laravel连接全文搜索引擎加快查询速度

mysqlphp隐约搜刮技巧_3分钟短文Laravel连接全文搜索引擎加快查询速度

访客 2024-11-08 0

扫一扫用手机浏览

文章目录 [+]

我们须要专门的文本搜索引擎,并且连接到laravel运用程序内,这便是本文所要说的Scout。

代码韶光

laravel scout 是一个独立的包和类库,可以很方便地通过composer接入系统, 且与Eloquent Model模型关联利用。

mysqlphp隐约搜刮技巧_3分钟短文Laravel连接全文搜索引擎加快查询速度

官方scout内置了 Algolia 和 Elasticsearch 驱动,但是社区也供应了其他可选项。
如果默认的话,优先选用切实其实定是 Algolia。

mysqlphp隐约搜刮技巧_3分钟短文Laravel连接全文搜索引擎加快查询速度
(图片来自网络侵删)

laravel 5.3及以上版本为系统引入scout库:

composer require laravel/scout

然后在 config/app.php 文件内的 providers 做事供应者内加入如下内容:

'providers' => [ Laravel\Scout\ScoutServiceProvider::class,]

如果想要利用配置文件设置scout,那么就把配置文件发布出来:

php artisan vendor:publish

这会天生 config/scout.php 文件。
我们再引入 algolia 的sdk库文件,以便在程序内利用:

composer require algolia/algoliasearch-client-php

想要在模型内引入搜索做事,只需在模型文件内引入

use Laravel\Scout\Searchable;

在模型内手动实现,那些属性和字段可以被搜索,只需实现 toSearchableArray() 方法。
然后实现 searchableAs(),返回一个字符串,用于指定索引的模型名。

scout默认订阅了模型的 create/delete/update 韶光,这些写操作的数据会触发更新索引, 删除索引,创建索引。
办法可以是同步,也可以放到行列步队内异步处理。

通过索引进行搜索,scout在查询办法上险些与eloquent model的办法别无二致。
比如:

Review::search('Lious')->get();

或者链式调用分页:

Review::search('Lious')->paginate(20);

由于 search 方法返回的是Query Builder工具,可以链式调用查询条件,和凑集的方法。
比如对查询结果集进行过滤:

Review::search('Lious')->where('account_id', 2)->get();

你在模型内利用的方法,这里都适用。

对付某些数据有可能并不想建立索引,放入搜索引擎,那么只需在模型内显式声明如下:

Review::withoutSyncingToSearch(function () { factory(Review::class, 10)->create();});

批量创建10条数据,且不建立索引。

手动掌握某些输入放入搜索引擎,建立索引数据,则可以链式调用 searchable() 方法:

Review::all()->searchable();

或者通过关联关系,将关联模型的数据写入搜索引擎:

$user->reviews()->searchable();

某些搜索数据不进行索引:

Review::where('actived', false)->unsearchable();

无效的条款不加入索引,节省空间。

如果你的数据库已经生产了大量的数据,或者在测试阶段,想要手动把所有的定义数据 导入到搜索引擎,可以在命令行如此操作:

php artisan scout:import App\\Review写在末了

本文通过先容laravel scout索引类的方法,向大家展示了如何引入搜索引擎, 以及在程序内风雅化掌握索引数据的方法。
全文检索在当代的web运用中应对高并发的 场景很有一套,值得大家深入研究学习。

Happy coding :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

标签:

相关文章

青春的脚步,23岁Leeseoyoung的追梦之旅

时光荏苒,岁月如梭。在我国这片沃土上,一代又一代的青年人正在用自己的青春书写着美好的未来。今天,让我们走进23岁的Leeseoyo...

PHP教程 2025-04-03 阅读0 评论0