Uma maneira fácil de usar o cliente oficial do Elastic Search em suas aplicações Laravel ou Lumen.
Instale a versão atual do pacote mailerlite/laravel-elasticsearch
via compositor:
composer require mailerlite/laravel-elasticsearch
Se você estiver usando o ElasticSearch versão 5, instale a versão 2 deste pacote:
composer require mailerlite/laravel-elasticsearch:^2
O provedor de serviços do pacote registrará automaticamente seu provedor de serviços.
Publique o arquivo de configuração:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
Depois de publicar o arquivo de configuração conforme sugerido acima, você pode configurar o ElasticSearch adicionando o seguinte ao arquivo .env
do seu aplicativo (com valores apropriados):
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
Se estiver fazendo login por meio de chaves de API, você precisará preencher estes valores:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
Se você estiver se conectando a instâncias do ElasticSearch no Amazon AWS, também precisará composer require aws/aws-sdk-php:^3.80
e adicionar o seguinte ao seu arquivo .env
:
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
Se você precisar usar outro método de autenticação com credenciais personalizadas (ou seja, instanceProfile()
), será necessário publicar o arquivo de configuração e 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
],
],
Se você tiver um trabalho executado no supervisor, deverá usar o Closure. Desta forma as credenciais serão renovadas em tempo de execução.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
Se você estiver usando php artisan config:cache
, você não pode ter o Closure em seu arquivo de configuração, chame-o assim:
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
Se você trabalha com Lumen, registre o provedor de serviço e configuração em bootstrap/app.php
:
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
Copie manualmente o arquivo de configuração para seu aplicativo.
A fachada Elasticsearch
é apenas um ponto de entrada para o cliente ES, então anteriormente você poderia ter 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 );
Agora você pode substituir essas duas últimas linhas simplesmente por:
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
Isso executará o comando na conexão padrão. Você pode executar um comando em qualquer conexão (consulte a configuração defaultConnection
e a matriz connections
no arquivo de configuração).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
Os usuários do Lumen que desejam usar Facades podem fazê-lo editando o arquivo bootstrap/app.php
para incluir o seguinte:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
Os usuários do Lumen que não usam fachadas precisarão usar a injeção de dependência ou o contêiner do aplicativo para obter o objeto de serviço ES:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
É claro que a injeção de dependência e o contêiner de aplicativos também funcionam para aplicativos Laravel.
Como o pacote é um wrapper do cliente oficial da Elastic, você pode fazer praticamente qualquer coisa com ele. Você não apenas pode executar operações CRUD padrão, mas também monitorar a integridade do seu cluster Elastic de forma programática, fazer backup dele ou fazer alterações nele. Algumas dessas operações são feitas através de comandos "namespaced", que este pacote suporta com prazer.
Para obter estatísticas de um índice:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
Para criar e restaurar snapshots (leia primeiro a documentação da Elastic sobre como criar caminhos de repositório e plug-ins):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
Para excluir índices inteiros (tenha cuidado!):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
Lembre-se de que este pacote é um invólucro fino que envolve um grande número de recursos do Elastic muito sofisticados e bem documentados. Informações sobre esses recursos e os métodos e parâmetros usados para chamá-los podem ser encontradas na documentação do Elastic. A ajuda para usá-los está disponível nos fóruns da Elastic e em sites como Stack Overflow.
Este pacote também fornece alguns comandos de console úteis.
Verifique se existe um índice:
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
Crie um índice:
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
Excluir um índice:
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
Crie ou atualize o mapeamento de índice: Observação: o arquivo de mapeamento de índice deve conter uma definição de mapeamento JSON válida conforme o Elasticsearch espera, por exemplo:
{
"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 >
Cria um alias:
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Remova o índice de um alias:
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Ative o alias do índice (útil para lançamento sem tempo de inatividade do novo índice):
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
Obrigado a todos que contribuíram para este projeto!
Use o Github para relatar bugs e fazer comentários ou sugestões.
Consulte CONTRIBUTING.md para saber como contribuir com alterações.
laravel-elasticsearch foi escrito graças a Colin Viebrock e é lançado sob a licença MIT. Está sendo mantido e desenvolvido pela MailerLite
Direitos autorais (c) 2023 MailerLite