Elasticsearch .NET para C# (.NET): guia completo com exemplos
1. O que é e para que serve
Elasticsearch .NET (NEST) é o cliente oficial de alto nível para integrar o mecanismo de busca Elasticsearch em aplicações C# e outras linguagens da plataforma .NET. A biblioteca oferece uma API fortemente tipada que permite realizar todas as operações com Elasticsearch: indexação de documentos, busca, agregações, gerenciamento de índices e mapeamentos, utilizando padrões familiares para desenvolvedores .NET (LINQ, métodos assíncronos, serialização com System.Text.Json ou Newtonsoft.Json).
Para que serve esta biblioteca? Elasticsearch é um poderoso sistema distribuído de busca em texto completo e análise em tempo real. Se sua aplicação em C# precisa realizar buscas complexas em grandes volumes de dados (logs, produtos, documentos), processar consultas analíticas (agregações) ou gerenciar um cluster Elasticsearch programaticamente, o NEST é a escolha padrão. Ele abstrai os detalhes de baixo nível das requisições HTTP e da serialização JSON, fornecendo uma interface fluente e tipagem forte.
A biblioteca suporta todas as versões do Elasticsearch a partir da 6.x e é compatível com .NET Standard 2.0, podendo ser usada em projetos .NET Framework 4.6.1+, .NET Core 2.0+ e .NET 5/6/7/8/9. O NEST é ativamente mantido pela Elastic e pela comunidade, com documentação detalhada e muitos exemplos disponíveis.
2. Instalação
A instalação é feita via NuGet Package Manager. Use um dos comandos abaixo:
// Via .NET CLI
dotnet add package NEST
// Via Package Manager Console
Install-Package NEST
// Ou pela interface do NuGet: procure por "NEST" e instale a versão estável mais recente
Você também pode instalar o cliente de baixo nível Elasticsearch.Net, mas o NEST já o inclui como dependência.
3. Início rápido — exemplo mínimo funcional
Crie um aplicativo console .NET e adicione as diretivas using:
using System;
using System.Threading.Tasks;
using Nest;
using static System.Console;
public class Program
{
public static async Task Main(string[] args)
{
// 1. Configuração da conexão
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("my_index");
var client = new ElasticClient(settings);
// 2. Definição do modelo de dados
var document = new Product
{
Id = 1,
Name = "Notebook",
Description = "Notebook gamer potente",
Price = 1500.99
};
// 3. Indexação do documento
var indexResponse = await client.IndexAsync(document, idx => idx.Index("products"));
if (indexResponse.IsValid)
WriteLine($"Documento indexado: {indexResponse.Id}");
// 4. Busca do documento
var searchResponse = await client.SearchAsync(s => s
.Index("products")
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("notebook")
)
)
);
foreach (var hit in searchResponse.Hits)
{
WriteLine($"Encontrado: {hit.Source.Name} - {hit.Source.Price:C}");
}
}
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
}
4. Principais métodos/funções/classes
4.1. ElasticClient.IndexAsync
Assinatura: Task<IndexResponse> IndexAsync<T>(T document, Func<IndexDescriptor<T>, IIndexRequest<T>> selector = null, CancellationToken ct = default)
O que faz: Indexa (adiciona ou atualiza) um documento no índice especificado. Se um documento com o mesmo ID já existir, ele será substituído.