Una forma sencilla de utilizar el cliente oficial de Elastic Search en tus aplicaciones Laravel o Lumen.
Instale la versión actual del paquete mailerlite/laravel-elasticsearch
a través del compositor:
composer require mailerlite/laravel-elasticsearch
Si está utilizando ElasticSearch versión 5, instale la versión 2 de este paquete:
composer require mailerlite/laravel-elasticsearch:^2
El proveedor de servicios del paquete registrará automáticamente su proveedor de servicios.
Publicar el archivo de configuración:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
Después de publicar el archivo de configuración como se sugirió anteriormente, puede configurar ElasticSearch agregando lo siguiente al archivo .env
de su aplicación (con los valores apropiados):
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
Si inicia sesión mediante claves API, deberá completar estos valores:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
Si se está conectando a instancias de ElasticSearch en Amazon AWS, también necesitará composer require aws/aws-sdk-php:^3.80
y agregue lo siguiente a su archivo .env
:
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
Si tiene que usar otro método de autenticación que tenga credenciales personalizadas (es decir, instanceProfile()
), debe publicar el archivo de configuración y usar 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 tiene un trabajo que se ejecuta en supervisor, debe utilizar el Cierre. De esta forma las credenciales se renovarán en tiempo de ejecución.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
Si está utilizando php artisan config:cache
, no puede tener el cierre en su archivo de configuración, llámelo así:
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
Si trabaja con Lumen, registre el proveedor de servicios y la configuración en bootstrap/app.php
:
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
Copie manualmente el archivo de configuración a su aplicación.
La fachada Elasticsearch
es solo un punto de entrada al cliente ES, por lo que anteriormente podrías haber usado:
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );
Ahora puedes reemplazar esas dos últimas líneas con simplemente:
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
Eso ejecutará el comando en la conexión predeterminada. Puede ejecutar un comando en cualquier conexión (consulte la configuración defaultConnection
y la matriz connections
en el archivo de configuración).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
Los usuarios de Lumen que deseen utilizar Facades pueden hacerlo editando el archivo bootstrap/app.php
para incluir lo siguiente:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
Los usuarios de Lumen que no usan fachadas necesitarán usar la inyección de dependencia o el contenedor de la aplicación para obtener el objeto de servicio ES:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
Por supuesto, la inyección de dependencia y el contenedor de aplicaciones también funcionan para aplicaciones Laravel.
Debido a que el paquete es un contenedor para el cliente Elastic oficial, puedes hacer prácticamente cualquier cosa con este paquete. No solo puede realizar operaciones CRUD estándar, sino que también puede monitorear el estado de su clúster Elastic mediante programación, realizar copias de seguridad o realizar cambios en él. Algunas de estas operaciones se realizan mediante comandos con "espacios de nombres", que este paquete admite felizmente.
Para obtener estadísticas para un índice:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
Para crear y restaurar instantáneas (lea primero los documentos de Elastic sobre la creación de rutas de repositorio y complementos):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
Para eliminar índices completos (¡tenga cuidado!):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
Recuerde que este paquete es una envoltura delgada que envuelve una gran cantidad de características de Elastic muy sofisticadas y bien documentadas. La información sobre esas características y los métodos y parámetros utilizados para llamarlas se puede encontrar en la documentación de Elastic. La ayuda para usarlos está disponible a través de los foros de Elastic y en sitios como Stack Overflow.
Este paquete también proporciona algunos comandos de consola útiles.
Compruebe si existe un índice:
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
Crea un índice:
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
Eliminar un índice:
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
Crear o actualizar la asignación de índice: Nota: El archivo de asignación de índice debe contener una definición de asignación JSON válida como lo espera Elasticsearch, por ejemplo:
{
"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 >
Crea un alias:
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Eliminar índice de un alias:
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Cambiar índice en alias (útil para la publicación sin tiempo de inactividad del nuevo índice):
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
¡Gracias a todos los que han contribuido a este proyecto!
Utilice Github para informar errores y hacer comentarios o sugerencias.
Consulte CONTRIBUTING.md para saber cómo contribuir con cambios.
laravel-elasticsearch fue escrito gracias a Colin Viebrock y se publica bajo la licencia MIT. Está siendo mantenido y desarrollado por MailerLite.
Copyright (c) 2023 MailerLite