laravel scout


第一步安装所需要的composer组件

composer require laravel/scout
composer require teamtnt/laravel-scout-tntsearch-driver
composer require fukuball/jieba-php:dev-master

第二步 进行相关配置

将这两条数据添加到 config\app.php

'providers' => [
    /*
     * Package Service Providers...
     */
    Laravel\Scout\ScoutServiceProvider::class,
    TeamTNT\Scout\TNTSearchScoutServiceProvider::class,
]

发布配置文件

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

打开你需要全文搜索的模型,例如,我的文章模型想进行全文检索`app\Models\Article.php`

<?php

namespace App\Models;

use Laravel\Scout\Searchable;                 #你需要添加
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{

    use Searchable;                           #你需要添加

    .
    .
    .

    /**
     * 定义文件索引名称
     * 你需要添加            
     *
     * @return string
     */
    public function searchableAs()
    {
        return 'article';
    }

    /**
     * 获取模型的可搜索数据
     * 你需要添加
     * @return array
     */
    public function toSearchableArray()
    {
        return $this->only('id','article_title', 'article_seo_key', 'article_source', 'article_content');
    }

    .
    .
    .

}

由于我们的 laravel-scout-tntsearch-driver 不支持中文分词我们需要用 `jieba`组件重写 创建 `app\Handlers\TokenizerHandler.php` 并填写一下代码

<?php

namespace App\Handlers;

use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
use TeamTNT\TNTSearch\Support\TokenizerInterface;

class TokenizerHandler implements TokenizerInterface
{
    public function tokenize($text, $stopwords = [])
    {
        Jieba::init(['dict' => 'small']);
        Finalseg::init();
        $text = strip_tags($text);                                      #获取纯文本
        $text = mb_strtolower($text);                                   #字母全部小写
        return is_numeric($text) ? [] : Jieba::cutForSearch($text);
    }
}

打开 config/scout.php 配置文件编辑如下

<?php

return [
    'driver' => env('SCOUT_DRIVER', 'tntsearch'),
    'prefix' => env('SCOUT_PREFIX', ''),
    'queue'  => env('SCOUT_QUEUE', false),
    'chunk'  => [
        'searchable'   => 500,
        'unsearchable' => 500,
    ],
    'soft_delete' => false,
    'algolia' => [
        'id'     => env('ALGOLIA_APP_ID', ''),
        'secret' => env('ALGOLIA_SECRET', ''),
    ],
    'tntsearch' => [
        'storage'   => storage_path('framework/index'),
        'tokenizer' => '\App\Handlers\TokenizerHandler'
    ],
];

打开.env文件添加这行配置

SCOUT_DRIVER=tntsearch

第三步 创建全文索引,并且开始搜索

php artisan tntsearch:import "App\Models\Article"      #创建索引时间会长, 还有吧php内存调大点

索引创建完成就可以使用了

$article       = \App\Models\Article::search('你好')->get();

dd($article);
来源: 原创
标签: 搜索 scount laravel

作者介绍

Image Description

zfajax舫

小时候的梦想是当宇航员,长大的梦想是在北京买套90㎡房的小站长、自媒体人,2014年毕业,后从事过网站开发搭建工作;2016年,创建了张舫博客;20015-至今在北京工作(微信:a7983310)

评论列表

还没有人评论,抢占前排沙发

发表评论

关于作者

Image Description

zfajax舫

小时候的梦想是当宇航员,长大的梦想是在北京买套90㎡房的小站长、自媒体人,2014年毕业,后从事过网站开发搭建工作;2016年,创建了张舫博客;20015-至今在北京工作(微信:a7983310)

关注作者

Social Links

定制项目外包

Unit 25 Suite 3, 925 Prospect PI,
Beach Resort, 23001

手机号码

18600004319