ElasticSearchのセットアップができたので、ここからはLaravel側のセットアップ。
Laravel Scountの組み込み
Laravel Scout – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.4/scout
Laravel Scout Elasticsearch Driver
https://github.com/ErickTamayo/laravel-scout-elastic
1 2 3 4 5 6 7 8 9 |
$ composer require laravel/scout $ composer require tamayo/laravel-scout-elastic $ composer require elasticsearch/elasticsearch $ vi config/app.php Laravel\Scout\ScoutServiceProvider::class, ScoutEngines\Elasticsearch\ElasticsearchProvider::class, $ php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ vi app/Article.php <?php namespace App; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; class Article extends Model { use Searchable; protected $fillable = ['title', 'description', 'tags', 'published_on']; protected $dates = ['published_on']; } |
1 2 3 4 5 6 7 8 9 10 11 12 |
$ vi config/scout.php //'driver' => env('SCOUT_DRIVER', 'algolia'), 'driver' => env('SCOUT_DRIVER', 'elasticsearch'), 'elasticsearch' => [ 'index' => env('ELASTICSEARCH_INDEX', 'laravel'), 'config' => [ 'hosts' => [ env('ELASTICSEARCH_HOST', 'localhost'), ], ], ], |
1 2 3 |
$ vi .env ELASTICSEARCH_INDEX=scout ELASTICSEARCH_HOST=http://localhost:9200 |
これでセットアップは完了。
ElasticSearchへ既存データ注入
公式ドキュメントで説明されている通り、Laravel Scoutを組み込んだ状態だと、Eloquentでレコード追加/更新/削除を行うとElasticSearchも併せて更新されるようになる。しかし、ElasticSearch組み込み時点で既に存在するレコードは手動でElasticSearchに流し込まないといけない。
というわけで、既存レコードをElasticSearchに流し込む。
1 2 3 |
$ php artisan scout:import "App\Article" Imported [App\Article] models up to ID: 12 All [App\Article] records have been imported. |
ElasticSearchのインデックスを確認。
1 2 3 |
$ curl -X GET http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open scout PN7wNd5iRga8pqmc9nj0VA 5 1 12 0 292.9kb 292.9kb |
コントローラから検索してみる
1 |
$articles = Article::search($str)->get(); |
記事本文に含まれる日本語の単語を入れてみると、検索されるものあり、されないものあり。どうも挙動がおかしい。おそらく日本語の処理が上手くいっていないのだろう。
Kuromojiのセットアップへ続く。