Utilizando o Elasticsearch com NEST no .NET Core 3.1

Henrique Mauri
4 min readMay 25, 2020

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.

https://aws.amazon.com/pt/elasticsearch-service/

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:

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

  1. Criação da conta gratuita no ElasticCloud
  2. Configuração do Elasticsearch e NEST na solução de exemplo
  3. Indexação dos dados de exemplo utilizando o NEST
  4. 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

--

--

Henrique Mauri

Arquiteto de Software | Microsoft MVP | MCT | MTAC | .NET Core | Azure | ElasticSearch | https://henriquemauri.net