安裝scout
composer require laravel/scout
在config/app.php 的 providers 陣列中新增
Laravel\Scout\ScoutServiceProvider::class
執行命令
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider
安裝laravel-scout-elastic
composer安裝composer require tamayo/laravel-scout-elastic
在config/app.php 的 providers 陣列中新增ScoutEngines\Elasticsearch\ElasticsearchProvider::class
修改scout.php檔案:
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
在最後新增
//配置elasticsearch引擎
'elasticsearch' => [
'index' => env('ELASTICSEARCH_INDEX', 'laravel'),//laravel就是索引的名字,可以隨便起
'hosts' => [
env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'),
],
]
可能composer時可能會報錯,是版本太高,實現降權(降低版本就好)【 composer require laravel/scout ^5.0.3】
建立命令
執行命令 php artisan make:command 命令的名php artisan make:command ESinit
會在 app\Console\Commands\目錄下建立 ESinit.phpclass ESinit extends Command
{
/**
* The name and signature of the console command.
* 這是命令的名字
* @var string
*/
//執行命令的名稱
protected $signature = 'es:init';
/**
* The console command description.
* 命令的描述
* @var string
*/
//protected $description = 'Command description';
protected $description = 'init laravel es for post';
/**
* Create a new command instance.
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 在這裡寫要寫的東西
* Execute the console command.
* @return mixed
*/
public function handle()
{
//coding,待會兒我們要在這裡寫程式碼
}
}
在 app\Console\Kernel.php 裡寫
protected $commands = [
\App\Console\Commands\ESinit::class
];
composer require guzzlehttp/guzzle
安裝guzzlehttp/guzzle成功後,在ESinit.php裡的handle()方法裡寫
//建立template
$client = new Client(); //這裡的Clinet()是你vendor下的GuzzleHttp下的Client檔案
$url = config('scout.elasticsearch.hosts')[0].'/inssa'; //這裡寫logstash配置中index引數
$client->delete($url);//確定沒有這個url
/*
* 這個模板作用於我要做用的索引
* */
$param = [
'json'=>[
/*
* 這句是取在scout.php(scout是驅動)裡我們配置好elasticsearch引擎的
* index項。
* PS:其實都是取陣列項,scout本身就是return一個陣列,
* scout.elasticsearch.index就是取
* scout[elasticsearch][index]
* */
'template'=>config('scout.elasticsearch.index'),
'mappings'=>[
'_default_'=>[
'dynamic_templates'=>[
[
'string'=>[
'match_mapping_type'=>'string',//傳進來的是string
'mapping'=>[
'type'=>'text',//把傳進來的string按text(文字)處理
'analyzer'=>'ik_smart',//用ik_smart進行解析(ik是專門解析中的外掛)
'fields'=>[
'keyword'=>[
'type'=>'keyword'
]
]
]
]
]
]
]
],
],
];
$client->put($url,$param);
$this->info('============create template success============');
//建立index
$url = config('scout.elasticsearch.hosts')[0].'/'.config('scout.elasticsearch.index');
//$client->delete($url);
$param = [
'json'=>[
'settings'=>[
'refresh_interval'=>'5s',
'number_of_shards'=>1,
'number_of_replicas'=>0,
],
'mappings'=>[
'_default_'=>[
'_all'=>[
'enabled'=>false
]
]
]
]
];
$client->put($url,$param);
$this->info('============create index success============');
首先得啟動Es
執行 php artisan es:init命令,出現下邊的資訊就說明執行成功了
============create template success============
============create index success==============
修改你要搜尋的model,以Admin為eg:
引用名稱空間
use Laravel\Scout\Searchable;
類中引用Searchable
use Searchable;
重寫searchableAs()方法 toSearchableArray() 方法
public function searchableAs() {
return 'post';
}
public function toSearchableArray() {
return [
'title'=>$this->title,
'content'=>$this->content
];
}
控制器呼叫方法,展示資料
$posts = \App\Model\Admin::search('')->get();
sdfsdf
本作品採用《CC 協議》,轉載必須註明作者和本文連結