Cliente Elasticsearch para C# (.NET): NEST e Elastic.Clients.Elasticsearch

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente Elasticsearch para C# (.NET): NEST e Elastic.Clients.Elasticsearch

\n\n

Elasticsearch é um poderoso sistema de busca e análise distribuído, amplamente utilizado para pesquisa de texto completo, registro de logs, monitoramento e análise de dados. Para trabalhar com Elasticsearch a partir de aplicações C# (.NET), existem dois principais clientes oficiais: NEST (de alto nível, com fluent API) e Elastic.Clients.Elasticsearch (novo, de baixo nível, introduzido a partir da versão 8.x). Neste artigo, abordaremos detalhadamente ambas as abordagens, instalação, operações básicas e exemplos de código.

\n\n

1. O que é um cliente Elasticsearch para .NET?

\n\n

O Elasticsearch fornece uma API RESTful, mas trabalhar diretamente com requisições HTTP em C# é inconveniente. Os clientes oficiais resolvem esse problema:

\n
    \n
  • NEST — cliente antigo, mas confiável, de alto nível. Oferece consultas fortemente tipadas, mapeamento de classes POCO e interface fluent. Recomendado para projetos em .NET Framework e .NET Core 3.1.
  • \n
  • Elastic.Clients.Elasticsearch — novo cliente (a partir do Elasticsearch 8.x). Leve, assíncrono, com suporte a .NET 6+. Utiliza System.Text.Json e não requer dependências adicionais.
  • \n
\n\n

2. Instalação das bibliotecas

\n\n

A instalação é feita via NuGet. Para NEST:

\n
dotnet add package NEST
\n

Para o novo cliente:

\n
dotnet add package Elastic.Clients.Elasticsearch
\n\n

3. Conexão ao Elasticsearch

\n\n

Exemplo de conexão usando NEST:

\n
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n    .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);
\n\n

Exemplo de conexão usando Elastic.Clients.Elasticsearch:

\n
var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);
\n\n

4. Definição do modelo de dados

\n\n

Para trabalhar com documentos, criaremos uma classe POCO:

\n
public class Product\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Description { get; set; }\n    public decimal Price { get; set; }\n    public DateTime CreatedAt { get; set; }\n}
\n\n

5. Operações CRUD (criação, leitura, atualização, exclusão)

\n\n

5.1. Indexação de documento (criação/atualização)

\n

NEST:

\n
var product = new Product { Id = 1, Name = "Notebook", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));
\n\n

Elastic.Clients.Elasticsearch:

\n
var product = new Product { Id = 1, Name = "Notebook", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);
\n\n

5.2. Obter documento por ID

\n

NEST:

\n
var response = await client.GetAsync<Product>(1, g => g.Index("products"));\nvar product = response.Source;
\n\n

Elastic.Clients.Elasticsearch:

\n
var response = await client.GetAsync<Product>("products", 1);\nvar product = response.Source;
\n\n

5.3. Atualização de documento

\n

NEST:

\n
var response = await client.UpdateAsync<Product>(1, u => u\n    .Index("products")\n    .Doc(new Product { Name = "Notebook HP", Price = 80000 }));
\n\n

Elastic.Clients.Elasticsearch:

\n
var response = await client.UpdateAsync<Product>("products", 1, u => u\n    .Doc(new Product { Name = "Notebook HP", Price = 80000 }));
\n\n

5.4. Exclusão de documento

\n

NEST:

\n
var response = await client.DeleteAsync<Product>(1, d => d.Index("products"));
\n\n

Elastic.Clients.Elasticse

Recommendations