Un moyen simple d'utiliser le client Elastic Search officiel dans vos applications Laravel ou Lumen.

Installez la version actuelle du package mailerlite/laravel-elasticsearch via composer :
composer require mailerlite/laravel-elasticsearchSi vous utilisez ElasticSearch version 5, installez la version 2 de ce package :
composer require mailerlite/laravel-elasticsearch:^2Le fournisseur de services du package enregistrera automatiquement son fournisseur de services.
Publiez le fichier de configuration :
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider " Après avoir publié le fichier de configuration comme suggéré ci-dessus, vous pouvez configurer ElasticSearch en ajoutant ce qui suit au fichier .env de votre application (avec les valeurs appropriées) :
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =Si vous vous connectez via des clés API, vous devrez renseigner ces valeurs :
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY = Si vous vous connectez à des instances ElasticSearch sur Amazon AWS, vous devrez également composer require aws/aws-sdk-php:^3.80 et ajouter ce qui suit à votre fichier .env :
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =... Si vous devez utiliser une autre méthode d'authentification ayant des informations d'identification personnalisées (c'est-à-dire instanceProfile() ), vous devez publier le fichier de configuration et utiliser 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
],
],Si vous avez un travail qui s'exécute en superviseur, vous devez utiliser la fermeture. De cette façon, les informations d'identification seront renouvelées au moment de l'exécution.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
], Si vous utilisez php artisan config:cache , vous ne pouvez pas avoir le Closure dans votre fichier de configuration, appelez-le comme ceci :
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
], Si vous travaillez avec Lumen, veuillez enregistrer le fournisseur de services et la configuration dans bootstrap/app.php :
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );Copiez manuellement le fichier de configuration dans votre application.
La façade Elasticsearch n'est qu'un point d'entrée dans le client ES, vous avez donc peut-être déjà utilisé :
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );Vous pouvez maintenant remplacer ces deux dernières lignes par simplement :
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data ); Cela exécutera la commande sur la connexion par défaut. Vous pouvez exécuter une commande sur n'importe quelle connexion (voir le paramètre defaultConnection et le tableau de connections dans le fichier de configuration).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data ); Les utilisateurs de Lumen qui souhaitent utiliser Facades peuvent le faire en modifiant le fichier bootstrap/app.php pour inclure les éléments suivants :
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);Les utilisateurs de Lumen qui n'utilisent pas de façades devront utiliser l'injection de dépendances ou le conteneur d'application pour obtenir l'objet de service ES :
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );Bien entendu, l’injection de dépendances et le conteneur d’applications fonctionnent également pour les applications Laravel.
Étant donné que le package est un wrapper autour du client Elastic officiel, vous pouvez faire à peu près tout avec ce package. Non seulement vous pouvez effectuer des opérations CRUD standard, mais vous pouvez également surveiller la santé de votre cluster Elastic par programme, le sauvegarder ou y apporter des modifications. Certaines de ces opérations sont effectuées via des commandes « espaces de noms », que ce package prend volontiers en charge.
Pour récupérer les statistiques d'un index :
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();Pour créer et restaurer des instantanés (lisez d'abord la documentation Elastic sur la création de chemins de référentiel et de plugins) :
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );Pour supprimer des index entiers (attention !) :
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);N'oubliez pas que ce package est une fine enveloppe autour d'un grand nombre de fonctionnalités Elastic très sophistiquées et bien documentées. Des informations sur ces fonctionnalités ainsi que sur les méthodes et paramètres utilisés pour les appeler sont disponibles dans la documentation Elastic. Une aide pour les utiliser est disponible via les forums Elastic et sur des sites comme Stack Overflow.
Ce package fournit également quelques commandes de console utiles.
Vérifiez si un index existe :
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >Créez un index :
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >Supprimer un index :
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >Créez ou mettez à jour le mappage d'index : Remarque : Le fichier de mappage d'index doit contenir une définition de mappage JSON valide comme l'attend Elasticsearch, par exemple :
{
"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 >Crée un alias :
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >Supprimez l'index d'un alias :
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >Basculer l'index sur l'alias (utile pour la publication sans temps d'arrêt du nouvel index) :
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name > Merci à tous ceux qui ont contribué à ce projet !
Veuillez utiliser Github pour signaler des bogues et faire des commentaires ou des suggestions.
Voir CONTRIBUTING.md pour savoir comment apporter des modifications.
laravel-elasticsearch a été écrit grâce à Colin Viebrock et est publié sous licence MIT. Il est maintenu et développé par MailerLite
Copyright (c) 2023 MailerLite