Elastisearch é sem dúvida uma ótima escolha para se implementar em ambientes distribuídos, podendo ser utilizado como base apenas para consultas, conforme a abordagem do CQS(separação de comandos e queries). Ele atende perfeitamente em cenários de pesquisa full-text, geração de relatórios, logs, dados analíticos, entre outros. Sendo totalmente escalável, seguro e com preço muito em conta (caso seja usado como SaaS), tudo isso consultado via API RESTFul e incrivelmente rápido.
Para facilitar ainda mais o desenvolvimento de consultas e manutenção dos dados no Elasticsearch, utilizaremos o package NEST, criado pela Elasticsearch.Net, que é uma robusta forma de construir queries em DSL (Domain Specific Language) sendo fortemente tipada.
Mais detalhes sobre o NEST:
- https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/nest.html
- https://miroslavpopovic.com/posts/2018/07/elasticsearch-with-aspnet-core-and-docker
Neste exemplo, utilizaremos a versão SaaS do Elasticsearch que é grátis por 14 dias de avaliação. Na solução do github (link no final deste artigo) também está configurado as imagens docker do Elasticsearch e Kibana no Docker Compose, além dos packages Serilog(para exibir no console todas as ações do projeto) e Swagger (documentação da API)
Agenda
- Criação da conta gratuita no ElasticCloud
- Configuração do Elasticsearch e NEST na solução de exemplo
- Indexação dos dados de exemplo utilizando o NEST
- Criação de queries utilizando o NEST
1.1 — Abra o site https://www.elastic.co/pt/downloads e clique em Iniciar no Elastic Cloud, logo depois insira seu e-mail, selecione a opção Familiar with Elasticsearch, just evaluating for a new project, em seguida selecione Observability (Logs, Metrics, APM, Uptime) e por fim clique em Submit
1.2 — Será enviado um e-mail de confirmação para sua caixa. Clique em Verify and Accept
1.3 — Na tela seguinte, crie sua senha de acesso e clique em Start your free trial para configurar seu Elasticsearch
1.4 — Configuração feita, agora é só esperar a criação da nossa stack do Elastic (Elasticsearch, Kibana e APM). Guarde seu username e password.
2.1 — Baixe a solução (link no final deste artigo) e configure o appsetting.json do projeto Sample.Elasticsearch.WebApi, modificando os valores com “xxxxxxxxx” pelas informações fornecidas na instalação do seu Elasticsearch (uri, username e password)
3.1 — Com o projeto configurado, rode a API chamando o link https://localhost:5001/swagger e execute o endpoint postsampledata. O resultado serão os dados de exemplo inseridos no seu Elasticsearch, criando um índice chamado indexactors. Se tudo der certo, será exibido a mensagem: Data successfully registered with Elasticsearch
3.2 — O código para indexar dados no Elasticsearch você confere abaixo. Basicamente é usar a injeção de dependência do NEST, criando o índice automaticamente (caso não exista) e inserindo os dados de exemplo que estão no método estático IndexActors.GetSampleData().
4.1 — Para verificar os dados inseridos no elastic execute o endpoint getall
4.2 — E para consultar os atores com condição no campo Nome, execute o endpoint getbyname preenchendo o parâmetro name. No exemplo abaixo foi passado como parâmetro o nome “michael”.
O exemplo das queries GetAll e GetByName você confere no código abaixo.
A sintaxe para escrever uma query no NEST é completamente diferente de uma query do LINQ no Entity Framework por exemplo, é preciso estudar bastante e seguir os exemplos na documentação:
Em resumo, o Elasticsearch é uma poderosa ferramenta para seu negócio. Vale a pena conhecer melhor.
O exemplo final do código e com mais detalhes você confere aqui: https://github.com/hgmauri/elasticsearch-with-nest
[…] informações sobre Elasticsearch você encontra aqui e […]