寫在前面
Elasticsearch(以下簡稱es)是一個即時的分散式搜尋和分析引擎。
在搜尋引擎方面,不只是Elasticsearch,像另一篇提到的Algolia,還有sphinx、Solr等等,這裡不做評價和比較,本篇主要介紹laravel如何使用Elasticsearch。
首選必須安裝有Elasticsearch.
本文基於laravel5.5,其他版本則大同小異。
準備工作
透過composer安裝依賴套件
composer require laravel/scout composer require tamayo/laravel-scout-elastic
基本設定
在config/app .php檔案中的providers陣列中加入服務提供者
// config/app.php 'providers' => [ // ... Laravel\Scout\ScoutServiceProvider::class, // ... ScoutEngines\Elasticsearch\ElasticsearchProvider::class, ],
使用下列指令產生scout設定檔
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
在config/scout.php中加入elasticsearch的設定
'elasticsearch' => [ 'index' => env('ELASTICSEARCH_INDEX', 'laravel'), 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://localhost:9200'), ], ],
然後我們打開.env文件,加入scout和elasticsearch的配置
# scout配置 SCOUT_DRIVER=elasticsearch SCOUT_PREFIX= # elasticsearch 配置 ELASTICSEARCH_INDEX=esdemo # elasticsearch 地址 ELASTICSEARCH_HOST=http://172.30.6.1:9200
建立索引
建立模型並填充資料
建立模型app/Student.php,為方便後續測試,請先建表格和填充數據,可以手動使用sql語句添加數據,也使用laravel自動的數據遷移和填充.
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; /** * 学生模型 */ class Student extends Model { use Searchable; /** * 索引名称 * * @return string */ public function searchableAs() { return 'students_index'; } /** * 可搜索的数据索引 * * @return array */ public function toSearchableArray() { $array = $this->toArray(); // Customize array... return $array; } }
#把所有現有記錄導入到搜尋索引裡
php artisan scout:import "App\Student"
是不是導入成功了呢?
php artisan scout:import "App\Student" Imported [App\Student] models up to ID: 500 Imported [App\Student] models up to ID: 1000 Imported [App\Student] models up to ID: 1500 Imported [App\Student] models up to ID: 2000 Imported [App\Student] models up to ID: 2500 Imported [App\Student] models up to ID: 3000 Imported [App\Student] models up to ID: 3500 Imported [App\Student] models up to ID: 4000 Imported [App\Student] models up to ID: 4500 Imported [App\Student] models up to ID: 5000 Imported [App\Student] models up to ID: 5500 Imported [App\Student] models up to ID: 6000 Imported [App\Student] models up to ID: 6500 Imported [App\Student] models up to ID: 7000 Imported [App\Student] models up to ID: 7500 Imported [App\Student] models up to ID: 8000 Imported [App\Student] models up to ID: 8500 Imported [App\Student] models up to ID: 9000 Imported [App\Student] models up to ID: 9500 Imported [App\Student] models up to ID: 10000 All [App\Student] records have been imported.
我們訪問es,http://172.30.6.1:9200/esdemo/students_index/_search
是不是已經有了剛剛導入的students_index索引資料
大功告成
$studens = App\Student::search('成燕')->get(); dd($studens);
可以填入個百萬資料試試,檢索速度,是不是比直接查詢資料庫快很多呢?
更多用法請查閱官方文件https://www.elastic.co/guide/...
更多Laravel相關技術文章,請造訪Laravel框架入門教學專欄進行學習!
以上是Laravel中利用Scout整合Elasticsearch搜尋引擎的詳細內容。更多資訊請關注PHP中文網其他相關文章!