前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 使用 Scout 实现全文检索

Laravel 使用 Scout 实现全文检索

作者头像
hedeqiang
发布2019-12-17 21:41:33
4.2K2
发布2019-12-17 21:41:33
举报
文章被收录于专栏:LaravelCodeLaravelCode

Laravel 使用 Scout 实现全文检索

为何要采用全文检索

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

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

代码语言:javascript
复制
select * from table where name like '%张三%';

再或者搜索更多字段

代码语言:javascript
复制
select * from table where title like '%php&' or content like '%laravel%' or ...

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

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

简介

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

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

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

注册 Algolia

安装 Scout

代码语言:javascript
复制
composer require laravel/scout

发布配置文件

代码语言:javascript
复制
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

安装 Algolia

代码语言:javascript
复制
composer require algolia/algoliasearch-client-php

配置

编辑 .env 文件

代码语言:javascript
复制
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

配置模型索引

代码语言:javascript
复制
<?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';
    }
}

配置搜索数据

代码语言:javascript
复制
<?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;
    }
}

导入索引

代码语言:javascript
复制
php artisan scout:import "App\Models\Post"

搜索

代码语言:javascript
复制
$posts = Post::search('php')->get();
dd($posts)

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

如果你在

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Laravel 使用 Scout 实现全文检索
    • 为何要采用全文检索
      • 简介
        • 安装 Scout
          • 安装 Algolia
            • 配置
              • 配置模型索引
              • 配置搜索数据
              • 导入索引
              • 搜索
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档