laravel-elasticsearch 全文搜尋設定
阿新 • • 發佈:2019-01-07
1、首先安裝 jave環境 jdk 下載地址 ,我用的是最新版本的,有時版本要跟elasticsearch對應
2、安裝elasticsearch 下載地址
3、安裝Laravel scout 全文搜尋包,這裡我用的是5.0.3版本,tamayo/laravel-scout-elastic .這裡的版本很重要,不然一會就出錯了!
composer require laravel/scout=5.0.3
生成配置檔案
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
這樣,scout就安裝完了,這可以參考官方教程
4、因為要使用es做搜尋引擎,所以我們要用到一個叫tamayo/laravel-scout-elastic的包。4.0對應5.0.3不要搞錯!
composer require tamayo/laravel-scout-elastic=4.0
5、新增服務提供器到config/app.php的providers陣列中
// config/app.php 'providers' => [ ... ScoutEngines\Elasticsearch\ElasticsearchProvider::class, ],
6、配置。在config/scout.php檔案中新增如下程式碼。預設使用的是algolia引擎,我們要使用es做引擎
'driver' => env('SCOUT_DRIVER', 'elasticsearch'), 'elasticsearch' => [ 'index' => env('ELASTICSEARCH_INDEX', '你的索引名'), 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'), ], ],
7、建立model 並配置
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model;use Laravel\Scout\Searchable; //一定要有,自動生成沒有的 class Article extends Model { // use Searchable; //一定要有 // 定義索引裡面的型別,上文我們說過,可以把type理解成一個數據表。我們現在要做的就是把我們所有的要全文搜尋的欄位都存入到es中的一個叫'_doc'的表中。 public function searchableAs() { return 'articles'; } // 定義有那些欄位需要搜尋 public function toSearchableArray() { return [ 'user_title' => $this->title, //user_name加上字首以區別。因為不同的表裡可能會有相同的欄位。mysql中的欄位是name,email,created_at。在es中我們儲存的user_name,user_email,user_created_at。是可以自定義的。 'user_description' => $this->description, ]; } }
8、匯入資料,其實看官方的那個文件,來增、更、刪除也可以的。主要是配置好es就好了
php artisan scout:import "App\Models\Article"
9、按官方scout的來使用搜索就可以了,例如
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Article; class TestController extends Controller { public function test($value='') { return Article::search('ic')->paginate(5); } }
最後總結,簡單使用,可以這樣,如果有其它複雜要求的話,可以自行設定!