使用 laravel 官方擴充套件 Scout 結合 ES 官方 Elasticsearch-PHP 。
環境:Laravel6.0 /PHP7.2 (如果您使用 ES7.X 以上版本,上述環境是最低環境要求)
按順序引入三個元件。
Elasticsearch-PHP:
首先保證 elasticsearch/elasticsearch
的版本與 ES
版本一致。
它的文件在
在安裝部分,它要求 PHP 7.1.0 or higher
,並且
因此我直接拉取 elasticsearch/elasticsearch 的最新版本即可。
composer require elasticsearch/elasticsearch
"elasticsearch/elasticsearch": "~7.0"
Scout
Laravel Scout 為 Eloquent 模型的全文搜尋提供了基於驅動的簡單的解決方案。這時候我們需要提供一個連線 ES
的驅動 tamayo/laravel-scout-elastic。
由於要相容 elasticsearch/elasticsearch
的版本,所以只能選擇 8.1
/8.0
版本。
直接拉取最新版本即可,同時注意要求 PHP 版本 >= 7.2,laravel/scout >=8.0 。而 laravel/scout 8.0 版本不再支援 Laravel5.x ,這也是我選擇 Laravel6.0
版本的原因。直接拉取最新的版本即可。
composer require laravel/scout
"laravel/scout": "^8.4",
composer require tamayo/laravel-scout-elastic
"tamayo/laravel-scout-elastic": "^8.0"
scout 配置
Scout 全文搜尋《Laravel 6 中文文件》
github.com/ErickTamayo/laravel-sco...
透過文件比較容易的完成配置,補充的是 ES7.10
放棄了 type
,預設的 type
名稱是 _doc
。即透過 http://xxx.com:9200/hots_index/_doc/1
檢索到 id=1 的資料。
#Model;
use Searchable;
public function searchableAs() {
return 'hots_index'; // 這並非type,而是索引名稱
}
#config/scout.php
'elasticsearch' => [
// 這裡已經沒有了index名稱的配置
'hosts' => [
[
'host' => env('ELASTICSEARCH_HOST', '127.0.0.1'),
'port' => env('ELASTICSEARCH_PORT', '9200'),
]
],
]
scout 用法
如果不需要對特別的欄位型別做 mapping
,直接填充資料即可,會自動建立 mapping
php artisan scout:import "App\Post"
文件中介紹了 shouldBeSearchable
方法,它的用法是返回 true
或 false
,這樣對某些資料進行 searchable()
或者 save()
時會遵循這個方法。
public function shouldBeSearchable()
{
return $this->is_hidden == 0 ? true : false;
}
2021.06.01更
query中帶有非法字串,結果直接報錯,所以你對搜尋的內容必須要先做處理
$pattern = '/(\+|-|&|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|;|~|\/)/';
$replace = ''; //替換空字元
//$replace = '\\\$1'; //或者轉義
$newStr = preg_replace($pattern, $replace, $str);
本作品採用《CC 協議》,轉載必須註明作者和本文連結