代码拉取完成,页面将自动刷新
composer require vanry/laravel-scout-tntsearch
config/app.php
添加 Provider ;'providers' => [
// ...
/**
* TNTSearch 全文搜索
*/
Laravel\Scout\ScoutServiceProvider::class,
Vanry\Scout\TNTSearchScoutServiceProvider::class,
],
composer require fukuball/jieba-php
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
/config/scout.php
配置项中增加 tntsearch
;'tntsearch' => [
'storage' => storage_path('indexes'), //必须有可写权限
'fuzziness' => env('TNTSEARCH_FUZZINESS', false),
'searchBoolean' => env('TNTSEARCH_BOOLEAN', false),
'asYouType' => false,
'fuzzy' => [
'prefix_length' => 2,
'max_expansions' => 50,
'distance' => 2,
],
'tokenizer' => [
'driver' => env('TNTSEARCH_TOKENIZER', 'default'),
'jieba' => [
'dict' => 'small',
//'user_dict' => resource_path('dicts/mydict.txt'), //自定义词典路径
],
'analysis' => [
'result_type' => 2,
'unit_word' => true,
'differ_max' => true,
],
'scws' => [
'charset' => 'utf-8',
'dict' => '/usr/local/scws/etc/dict.utf8.xdb',
'rule' => '/usr/local/scws/etc/rules.utf8.ini',
'multi' => 1,
'ignore' => true,
'duality' => false,
],
],
'stopwords' => [
'的',
'了',
'而是',
],
],
.env
文件增加配置SCOUT_DRIVER=tntsearch
TNTSEARCH_TOKENIZER=jieba
/app/Models/Article.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Article extends Model
{
use Searchable;
/**
* 索引的字段
*
* @return array
*/
public function toSearchableArray()
{
return $this->only('id', 'title', 'content');
}
}
为了防止 PHP Fatal error: Allowed memory size of n bytes exhausted ; 咱给增加到 256M 以解决内存不够报错的问题;
/app/Providers/AppServiceProvider.php
public function boot()
{
/**
* 增加内存防止中文分词报错
*/
ini_set('memory_limit', "256M");
}
php artisan scout:import "App\Models\Article"
使用起来也相当简单; 只需要把要搜索的内容传给 search() 方法即可;
/routes/web.php
<?php
use App\Models\Article;
Route::get('search', function () {
// 为查看方便都转成数组
dump(Article::all()->toArray());
dump(Article::search('功能齐全的搜索引擎')->get()->toArray());
});
成功的查出了数据;
<?php
use App\Models\Article;
Route::get('search', function () {
// 为查看方便都转成数组
dump(Article::all()->toArray());
dump('下面搜索的是:功能齐全的搜索引擎');
dump(Article::search('功能齐全的搜索引擎')->get()->toArray());
dump('此处把content改为:让全文检索变的简单而强大');
// 修改 content 测试索引是否会自动同步
$first = Article::find(1);
$first->content = '让全文检索变的简单而强大';
$first->save();
dump('下面搜索的是:功能齐全的搜索引擎');
dump(Article::search('功能齐全的搜索引擎')->get()->toArray());
dump('下面搜索的是:简单的检索');
dump(Article::search('简单的检索')->get()->toArray());
});
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。