現在のインターネット時代では、大量のデータが爆発的に増加しており、検索エンジンの重要性がますます高まっています。 Elasticsearch は、拡張性の高い全文検索エンジンとして、開発者にとって検索問題を解決するための最初の選択肢となりつつあります。
この記事では、ThinkPHP6 で Elasticsearch を使用してデータ取得および検索機能を実装する方法を紹介します。それでは始めてみましょう。
ステップ 1: elasticsearch-php のインストール
composer を使用して公式 elasticsearch-php ライブラリをインストールします
composer require elasticsearch/elasticsearch
その後、configuresearch.php ファイルに Elasticsearch 接続構成情報を書き込む必要があります
return [ 'host' => ['your.host.com'], 'port' => 9200, 'scheme' => 'http', 'user' => '', 'pass' => '' ];
ここにはパスワードがないことに注意してください。オンラインでデプロイする場合は、パスワードを追加し、接続が安全であることを確認するために https を使用して接続する必要があります。
ステップ 2: laravel-scout のインストール
laravel-scout は、Laravel 用の Eloquent ORM 全文検索拡張パッケージです。Elasticsearch の統合を実現するには、ThinkPHP6 にインストールする必要があります。インストールするには、次のコマンドを使用します。 :
composer require laravel/scout
ステップ 3: laravel-scout-elastic パッケージをインストールする
ThinkPHP6 では、Elasticsearch に接続するために拡張パッケージ laravel-scout-elastic を使用する必要があります。同様に、次のコマンドを使用してインストールします。
composer require babenkoivan/scout-elasticsearch-driver:^7.0
app.php でスカウトとエラスティック ドライバーを構成します
return [ 'providers' => [ //... LaravelScoutScoutServiceProvider::class, ScoutElasticsearchElasticsearchServiceProvider::class, //... ], 'aliases' => [ //... 'Elasticsearch' => ScoutElasticsearchFacadesElasticsearch::class, //... ], ];
次に、次のように configscout.php でモデルの検索エンジンを構成します。 # #
'searchable' => [ AppModelsModel::class => [ 'index' => 'model_index', 'type' => 'model_type' ], ],
Model クラスで Searchable トレイトを使用し、次のようにパブリック関数 toSearchableArray() 関数を宣言します。
<?php namespace AppModels; use LaravelScoutSearchable; class Model extends Model { // 使用scout可搜索的trait use Searchable; // 返回可被搜索的模型数据 public function toSearchableArray() { return [ 'title' => $this->title, 'content' => $this->content ]; }
最後に、検索結果リスト、検索統計などの検索関連 API を作成します。そのためには、公式の Elasticsearch API をある程度理解している必要があります。詳細については、Elasticsearch の公式ドキュメントを参照してください。
use ElasticsearchClientBuilder; class SearchController extends Controller { //搜索结果列表 public function list(Request $request) { $searchQuery = $request->input('q'); //搜索关键字 //搜索操作 $elasticsearch = ClientBuilder::create()->setHosts(config('elasticsearch.host'))->build(); $response = $elasticsearch->search([ 'index' => 'model_index', // 索引名称 'type' => 'model_type', // 类型 'size' => 1000, 'body' => [ 'query' => [ 'bool' => [ 'should' => [ ['match' => ['title' => $request->input('q')]], ['match' => ['content' => $request->input('q')]] ] ] ] ] ]); //格式化返回结果 $result = []; foreach ($response['hits']['hits'] as $hit) { //搜索评分 $hit['_score']; //搜索到的数据 $result[] = $hit['_source']; } return json_encode($result); } }
$request->input('q') は、任意のキーワードに置き換えることができます。
以上がThinkPHP6 で Elasticsearch を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。