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 后台,看下发现并没有记录,出现这种原因就是本地计算机不行(反正我是不行,),发布到自己的服务器然后在重新生成索引,应该就没问题了

如果你在

暂无回复
0 / 180
网站公告

LaravelCode 正式上线啦!

今日诗词
正在加载今日诗词....
极客时间
极客时间
标签云
PHP Laravel API 随想 Node.js Linux Yii2.0 Redis 队列 JavaScript Vue Java MySQL 微信小程序 Python