搜索引擎优化高级编程:php版(服务带载能力太弱/delete/update/scout时间)
优采云 发布时间: 2022-02-28 17:29搜索引擎优化高级编程:php版(服务带载能力太弱/delete/update/scout时间)
介绍
对于数据库查询,主键和索引通常是加速搜索的强大工具。对于文本搜索、模糊搜索、全文搜索,虽然MySQL的MyISAM引擎支持,但性能往往不能满足生产需求,或者服务负载能力太弱。
我们需要一个专用的文本搜索引擎并连接到 laravel 应用程序,这就是本文要讨论的 Scout。
代码时间
laravel scout 是一个独立的包和类库,可以通过composer轻松接入系统,与Eloquent Model关联使用。
官方 Scout 内置了 Algolia 和 Elasticsearch 驱动程序,但社区也提供了其他选项。如果默认,首选肯定是 Algolia。
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 订阅模型的创建/删除/更新时间。这些写操作的数据会触发索引的更新、索引的删除、索引的创建。该方法可以是同步的,也可以放在队列中进行异步处理。
通过索引搜索,scout 的查询方式几乎与 eloquent 模型相同。例如:
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应用程序中的高并发场景时非常有用,值得深入研究和研究。
快乐编码:-)
我是@programmer小助手,继续分享编程知识,欢迎关注。