Laravel または Lumen アプリケーションで公式 Elastic Search クライアントを使用する簡単な方法です。
現在のバージョンのmailerlite/laravel-elasticsearch
パッケージを、composer 経由でインストールします。
composer require mailerlite/laravel-elasticsearch
ElasticSearch バージョン 5 を使用している場合は、このパッケージのバージョン 2 をインストールします。
composer require mailerlite/laravel-elasticsearch:^2
パッケージのサービス プロバイダーは、そのサービス プロバイダーを自動的に登録します。
設定ファイルを公開します。
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
上記のように構成ファイルを公開した後、アプリケーションの.env
ファイルに次の内容を追加して ElasticSearch を構成できます (適切な値を指定)。
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
API キー経由でログインしている場合は、次の値を入力する必要があります。
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
Amazon AWS の ElasticSearch インスタンスに接続している場合は、 composer require aws/aws-sdk-php:^3.80
、 .env
ファイルに以下を追加する必要もあります。
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
カスタム認証情報を持つ別の認証方法 (つまり、 instanceProfile()
) を使用する必要がある場合は、設定ファイルを公開し、 aws_credentialsを使用する必要があります。
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
$ credentials = $ memoizedProvider ()-> wait ();
. . .
' hosts ' => [
[
' host ' => env ( ' ELASTICSEARCH_HOST ' , ' localhost ' ),
// For local development, the default Elasticsearch port is 9200.
// If you are connecting to an Elasticsearch instance on AWS, you probably want to set this to null
' port ' => env ( ' ELASTICSEARCH_PORT ' , 9200 ),
' scheme ' => env ( ' ELASTICSEARCH_SCHEME ' , null ),
' user ' => env ( ' ELASTICSEARCH_USER ' , null ),
' pass ' => env ( ' ELASTICSEARCH_PASS ' , null ),
// If you are connecting to an Elasticsearch instance on AWS, you will need these values as well
' aws ' => env ( ' AWS_ELASTICSEARCH_ENABLED ' , false ),
' aws_region ' => env ( ' AWS_REGION ' , '' ),
' aws_key ' => env ( ' AWS_ACCESS_KEY_ID ' , '' ),
' aws_secret ' => env ( ' AWS_SECRET_ACCESS_KEY ' , '' )
' aws_credentials ' => $ credentials
],
],
スーパーバイザで実行するジョブがある場合は、クロージャを使用する必要があります。このようにして、認証情報は実行時に更新されます。
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
php artisan config:cache
使用している場合、構成ファイルにクロージャを含めることはできません。次のように呼び出します。
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
Lumen を使用している場合は、サービスプロバイダーと構成をbootstrap/app.php
に登録してください。
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
構成ファイルをアプリケーションに手動でコピーします。
Elasticsearch
ファサードは ES クライアントへの単なるエントリ ポイントであるため、以前は次のものを使用していた可能性があります。
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );
最後の 2 行を次のように置き換えることができます。
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
これにより、デフォルトの接続でコマンドが実行されます。任意の接続でコマンドを実行できます (構成ファイルのdefaultConnection
設定とconnections
配列を参照してください)。
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
ファサードの使用を希望する Lumen ユーザーは、 bootstrap/app.php
ファイルを編集して以下を含めることでこれを行うことができます。
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
ファサードを使用していない Lumen ユーザーは、ES サービス オブジェクトを取得するために依存関係注入またはアプリケーション コンテナーを使用する必要があります。
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
もちろん、依存関係の注入とアプリケーション コンテナーは Laravel アプリケーションでも同様に機能します。
このパッケージは公式 Elastic クライアントのラッパーであるため、このパッケージを使用するとほとんど何でもできます。標準の CRUD 操作を実行できるだけでなく、Elastic クラスターの状態をプログラムで監視したり、バックアップしたり、変更を加えたりすることもできます。これらの操作の一部は、このパッケージが喜んでサポートする「名前空間」コマンドを通じて実行されます。
インデックスの統計を取得するには:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
スナップショットを作成および復元するには (最初にリポジトリ パスとプラグインの作成に関する Elastic ドキュメントを読んでください):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
インデックス全体を削除するには (注意してください):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
このパッケージは、非常に洗練され、十分に文書化された多数の Elastic 機能を包む薄いラッパーであることを覚えておいてください。これらの機能、およびそれらを呼び出すために使用されるメソッドとパラメーターに関する情報は、Elastic のドキュメントに記載されています。これらの使用に関するヘルプは、Elastic フォーラムや Stack Overflow などのサイトから入手できます。
このパッケージには、いくつかの便利なコンソール コマンドも提供されています。
インデックスが存在するかどうかを確認します。
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
インデックスを作成します。
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
インデックスを削除します。
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
インデックス マッピングの作成または更新:注: インデックス マッピング ファイルには、Elasticsearch が期待する有効な JSON マッピング定義が含まれている必要があります。次に例を示します。
{
"body" : {
"_source" : {
"enabled" : true
},
"properties" : {
"id" : {
"type" : " keyword "
},
"property_1" : {
"type" : " text "
},
"property_2" : {
"type" : " text "
}
}
}
}
php artisan laravel-elasticsearch:utils:index-create-or-update-mapping < your_elasticsearch_index_name > < json_mapping_absolute_file_path >
エイリアスを作成します。
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
エイリアスからインデックスを削除します。
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
エイリアスでインデックスを切り替えます (ダウンタイムなしで新しいインデックスをリリースする場合に役立ちます)。
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
このプロジェクトに貢献してくれた皆さんに感謝します!
バグの報告やコメントや提案には Github を使用してください。
変更を貢献する方法については、CONTRIBUTING.md を参照してください。
laravel-elasticsearch は Colin Viebrock のおかげで書かれ、MIT ライセンスの下でリリースされています。 MailerLite によって保守および開発されています。
著作権 (c) 2023 メーラーライト