Cliente Elasticsearch para C# (.NET): NEST y Elastic.Clients.Elasticsearch
\n\nElasticsearch es un potente sistema distribuido de búsqueda y análisis que se utiliza ampliamente para búsqueda de texto completo, registro de eventos, monitoreo y análisis de datos. Para trabajar con Elasticsearch desde aplicaciones en C# (.NET), existen dos clientes oficiales principales: NEST (de alto nivel, con fluent API) y Elastic.Clients.Elasticsearch (nuevo, de bajo nivel, disponible desde la versión 8.x). En este artículo, analizaremos en detalle ambos enfoques, la instalación, las operaciones básicas y ejemplos de código.
\n\n1. ¿Qué es un cliente Elasticsearch para .NET?
\n\nElasticsearch proporciona una API RESTful, pero trabajar directamente con solicitudes HTTP en C# no es práctico. Los clientes oficiales resuelven este problema:
\n- \n
- NEST — un cliente de alto nivel antiguo pero confiable. Proporciona consultas fuertemente tipadas, mapeo de clases POCO e interfaz fluent. Recomendado para proyectos en .NET Framework y .NET Core 3.1. \n
- Elastic.Clients.Elasticsearch — un nuevo cliente (a partir de Elasticsearch 8.x). Ligero, asíncrono, con soporte para .NET 6+. Utiliza System.Text.Json y no requiere dependencias adicionales. \n
2. Instalación de las librerías
\n\nLa instalación se realiza a través de NuGet. Para NEST:
\ndotnet add package NEST\nPara el nuevo cliente:
\ndotnet add package Elastic.Clients.Elasticsearch\n\n3. Conexión a Elasticsearch
\n\nEjemplo de conexión usando NEST:
\nvar settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);\n\nEjemplo de conexión usando Elastic.Clients.Elasticsearch:
\nvar settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);\n\n4. Definición del modelo de datos
\n\nPara trabajar con documentos, crearemos una clase 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. Operaciones CRUD (crear, leer, actualizar, eliminar)
\n\n5.1. Indexación de documento (crear/actualizar)
\nNEST:
\nvar product = new Product { Id = 1, Name = "Portátil", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));\n\nElastic.Clients.Elasticsearch:
\nvar product = new Product { Id = 1, Name = "Portátil", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);\n\n5.2. Obtener 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. Actualizar documento
\nNEST:
\nvar response = await client.UpdateAsync<Product>(1, u => u\n .Index("products")\n .Doc(new Product { Name = "Portátil HP", Price = 80000 }));\n\nElastic.Clients.Elasticsearch:
\nvar response = await client.UpdateAsync<Product>("products", 1, u => u\n .Doc(new Product { Name = "Portátil HP", Price = 80000 }));\n\n5.4. Eliminar documento
\nNEST:
\nvar response = await client.DeleteAsync<Product>(1, d => d.Index("products"));\n\nElastic.Clients.Elasticse
También en la biblioteca
Envío de correo electrónico en PHP: Guía completa de la biblioteca PHPMailer
Pruebas en Go (Golang): frameworks y herramientas — guía completa
Cliente Redis Swift: RediStack para iOS/macOS
Cliente OAuth para Swift (iOS/macOS): guía completa