简述什么是搜索引擎优化(服务带载能力太弱/delete/update/scout时间)
优采云 发布时间: 2021-12-19 10:03简述什么是搜索引擎优化(服务带载能力太弱/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' => [
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();
复制代码
你在模型中使用的方法在这里都适用。
对于某些数据,你可能不想建立索引并放到搜索引擎中,那么你只需要在模型中显式声明如下:
批量创建10条数据,无需索引。
要手动控制搜索引擎的某些输入以构建索引数据,您可以在链中调用 searchable() 方法:
Review::all()->searchable();
复制代码
或者通过关联关系,将关联模型的数据写入搜索引擎:
$user->reviews()->searchable();
复制代码
某些搜索数据未编入索引:
Review::where('actived', false)->unsearchable();
复制代码
无效条目不会添加到索引中,从而节省空间。
如果你的数据库已经产生了大量的数据,或者在测试阶段,你想手动将所有的定义数据导入到搜索引擎中,你可以在命令行上这样做:
php artisan scout:import App\\Review
复制代码
写在最后
本文介绍了laravel scout 索引类的方法,给大家展示如何引入搜索引擎,以及如何在程序中精细控制索引数据。全文检索在现代web应用中对于高并发有一套很好的场景,值得深入研究和研究。
快乐编码:-)
我是@。我继续分享编程知识。欢迎关注。