laravel scout
- 作者 : zfajax舫
- |
- 发布时间 : 6年前
- |
- 评论数 : 3
- 查看数 : 984
第一步安装所需要的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);
- 项目的起源和底层原理: http://tnt.studio/blog/solving-the-search-...
- 与 Laravel Scout 的集成:http://tnt.studio/blog/did-you-mean-functi...
- 简单的教程:http://tnt.studio/blog/searching-for-bobby...
- 更多信息请查看 Github:https://github.com/teamtnt/tntsearch
- laravel与Scout : https://laravel.com/docs/6.x/scout