Laravel 使用 Scout 实现全文检索

为何要采用全文检索

一个字块,可以秒级、毫秒级搜索出你搜索的内容

最原先我们可以简单的通过查询语句实现检索条件 比如:

select * from table where name like '%张三%';

再或者搜索更多字段

select * from table where title like '%php&' or content like '%laravel%' or ...

可想而知如果我们数据量很大,多达几十万、几百万数据查询一次是非常耗时的。即使你在数据库中添加了索引,还是不尽人意

因此需要一个更快、更快、更快的数据查询,而 Laravel 的 scout 就是专门为搜索来解决难题的

简介

Laravel ScoutEloquent 模型 的全文搜索提供了基于驱动的简单的解决方案。通过使用模型观察者, Scout 会自动同步 Eloquent 记录的搜索索引。

目前, Scout 自带一个 Algolia 驱动。不过,编写自定义驱动也很简单,你可以轻松的通过自己的搜索实现来扩展 Scout

不过 是收费的,不过对于个人站来说已经处处有余了 (是对于我这种没有什么流量的人来说)

注册 Algolia

安装 Scout

composer require laravel/scout

发布配置文件

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

安装 Algolia

composer require algolia/algoliasearch-client-php

配置

编辑 .env 文件

SCOUT_DRIVER=algolia
SCOUT_QUEUE=true
ALGOLIA_APP_ID=CRTW*****
ALGOLIA_SECRET=a1a8a9e*****

其中 ALGOLIA_APP_IDALGOLIA_SECRET 在 刚才注册的 algolia 里,API Keys 目录中的 Application ID 就是 ALGOLIA_APP_ID, Admin API Key 就是 ALGOLIA_SECRET

配置模型索引

<?php

namespace App\Models;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;

    /**
     * 获取模型的索引名称.
     *
     * @return string
     */
    public function searchableAs()
    {
        return 'posts_index';
    }
}

配置搜索数据

<?php

namespace App\Models;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;

    /**
     * 获取模型的索引名称.
     *
     * @return string
     */
    public function searchableAs()
    {
        return 'posts_index';
    }

    /**
     * 获取模型的索引数据数组
     *
     * @return array
     */
    public function toSearchableArray()
    {
        $array = $this->toArray();

        // 自定义数组...

        return $array;
    }
}

导入索引

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

搜索

$posts = Post::search('php')->get();
dd($posts)

如果你是在你本地计算器中进行尝试,你会发现,并没有什么卵用,根本搜索不到任何数据,接着进入 Algolia 后台,看下发现并没有记录,出现这种原因就是本地计算机不行(反正我是不行,),发布到自己的服务器然后在重新生成索引,应该就没问题了

如果你在

关于极客返利

极客返利 是由我个人开发的一款网课返利、返现平台。包含 极客时间返现、拉勾教育返现、掘金小册返现、GitChat返现。目前仅包含这几个平台。后续如果有需要可以考虑其他平台。 简而言之就是:你买课,我返现。让你花更少的钱,就可以买到课程。

https://geekfl.com

https://geek.laravelcode.cn

版权许可

本作品采用 知识共享署名 4.0 国际许可协议 进行许可。

转载无需与我联系,但须注明出处,注明文章来源 Laravel 使用 Scout 实现全文检索

联系我

编程怪事
暂无回复
0 / 180