Cliente Elasticsearch para C# (.NET): NEST e Elastic.Clients.Elasticsearch
\n\nElasticsearch é 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\n1. O que é um cliente Elasticsearch para .NET?
\n\nO 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
2. Instalação das bibliotecas
\n\nA instalação é feita via NuGet. Para NEST:
\ndotnet add package NEST\nPara o novo cliente:
\ndotnet add package Elastic.Clients.Elasticsearch\n\n3. Conexão ao Elasticsearch
\n\nExemplo de conexão usando NEST:
\nvar settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);\n\nExemplo de conexão usando Elastic.Clients.Elasticsearch:
\nvar settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);\n\n4. Definição do modelo de dados
\n\nPara trabalhar com documentos, criaremos uma classe POCO:
\npublic 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\n5. Operações CRUD (criação, leitura, atualização, exclusão)
\n\n5.1. Indexação de documento (criação/atualização)
\nNEST:
\nvar product = new Product { Id = 1, Name = "Notebook", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));\n\nElastic.Clients.Elasticsearch:
\nvar product = new Product { Id = 1, Name = "Notebook", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);\n\n5.2. Obter documento por ID
\nNEST:
\nvar response = await client.GetAsync<Product>(1, g => g.Index("products"));\nvar product = response.Source;\n\nElastic.Clients.Elasticsearch:
\nvar response = await client.GetAsync<Product>("products", 1);\nvar product = response.Source;\n\n5.3. Atualização de documento
\nNEST:
\nvar response = await client.UpdateAsync<Product>(1, u => u\n .Index("products")\n .Doc(new Product { Name = "Notebook HP", Price = 80000 }));\n\nElastic.Clients.Elasticsearch:
\nvar response = await client.UpdateAsync<Product>("products", 1, u => u\n .Doc(new Product { Name = "Notebook HP", Price = 80000 }));\n\n5.4. Exclusão de documento
\nNEST:
\nvar response = await client.DeleteAsync<Product>(1, d => d.Index("products"));\n\nElastic.Clients.Elasticse
Também na biblioteca
Trabalho com XML em PHP: guia completo para análise e criação de documentos XML
golangci-lint para Go: guia completo com exemplos
gRPC para TypeScript: bibliotecas e exemplos de uso
Trabalho com imagens em Go (Golang): image, draw, imaging, resize