Laravel6 使用 ElasticSearch7.10

php_yt發表於2020-12-02

使用 laravel 官方擴充套件 Scout 結合 ES 官方 Elasticsearch-PHP

環境:Laravel6.0 /PHP7.2 (如果您使用 ES7.X 以上版本,上述環境是最低環境要求)
按順序引入三個元件。

Elasticsearch-PHP:

首先保證 elasticsearch/elasticsearch 的版本與 ES 版本一致。
它的文件在

Laravel6 使用 Elastic7.10

Laravel6 使用 Elastic7.10

Laravel6 使用 Elastic7.10

在安裝部分,它要求 PHP 7.1.0 or higher,並且

Laravel6 使用 Elastic7.10

因此我直接拉取 elasticsearch/elasticsearch 的最新版本即可。

composer require elasticsearch/elasticsearch
"elasticsearch/elasticsearch": "~7.0"

Scout

Laravel Scout 為 Eloquent 模型的全文搜尋提供了基於驅動的簡單的解決方案。這時候我們需要提供一個連線 ES 的驅動 tamayo/laravel-scout-elastic

Laravel6 使用 Elastic7.10

由於要相容 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 方法,它的用法是返回 truefalse,這樣對某些資料進行 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 協議》,轉載必須註明作者和本文連結
welcome come back

相關文章