全文搜索是很重要的功能,實現的方式也有不少種。如下經過 Laravel Scout 和 Elasticsearch 實現。先來看下各自的介紹php
Laravel Scout 爲 Eloquent 模型全文搜索實現提供了簡單的、基於驅動的解決方案。經過使用模型觀察者,Scout 會自動同步更新模型記錄的索引。
Elasticsearch是一個基於Lucene庫的搜索引擎。它提供了一個分佈式、支持多租戶的全文搜索引擎,具備HTTP Web接口和無模式JSON文檔。Elasticsearch是用Java開發的,並在Apache許可證下做爲開源軟件發佈。官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其餘語言中都是可用的。[5]根據DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業搜索引擎,其次是Apache Solr,也是基於Lucene。
新建 fake_articles
用來測試html
php artisan make:model Models/FakeArticle -m
database/migrations/2019_06_13_095420_create_fake_articles_table.php
編輯以下public function up() { Schema::create('fake_articles', function (Blueprint $table) { $table->increments('id'); $table->string('author', 20)->comment('做者'); $table->string('title', 200)->comment('標題'); $table->text('content')->comment('內容'); $table->timestamps(); }); }
php artisan migrate
php artisan make:seeder FakeArticlesSeeder
public function run() { \App\Models\FakeArticle::insert([ [ 'author' => '王二', 'title' => '黃金時代', 'content' => '那一天我二十一歲,在我一輩子的黃金時代,我有好多奢望。我想愛,想吃,還想在一瞬間變整天上半明半暗的雲,後來我才知道,生活就是個緩慢受錘的過程,人一每天老下去,奢望也一每天消逝,最後變得像捱了錘的牛同樣。但是我過二十一歲生日時沒有預見到這一點。我以爲本身會永遠生猛下去,什麼也錘不了我。', 'created_at' => now(), 'updated_at' => now(), ], ['author' => '陳輝', 'title' => '綠毛水怪', 'content' => '大團的蒲公英浮在街道的河流口,吞吐着柔軟的針同樣的光,咱們好像在池塘的水底,從一個月亮走向另外一個月亮。', 'created_at' => now(), 'updated_at' => now(), ], ['author' => '迅哥', 'title' => '社戲', 'content' => '兩岸的豆麥和河底的水草所發散出來的清香,夾雜在水氣中撲面的吹來;月色便朦朧在這水氣裏。淡黑的起伏的連山,彷彿是踊躍的鐵的獸脊似的,都遠遠的向船尾跑去了,但我卻還覺得船慢。他們換了四回手,漸望見依稀的趙莊,並且彷佛聽到歌吹了,還有幾點火,料想即是戲臺,但或者也許是漁火。', 'created_at' => now(), 'updated_at' => now(), ] ]); }
php artisan db:seed --class=FakeArticlesSeeder
laradock 中支持 Elasticsearch,直接搭建就能夠,省去了諸多麻煩laravel
laradock
目錄docker-compose build elasticsearch
docker-compose up -d elasticsearch
docker-compose exec elasticsearch bash
elasticsearch/Dockerfile
中能夠查看版本 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
docker-compose restart elasticsearch
參考資料:Laravel Scout、ikgit