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

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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



Elasticsearch es un potente sistema distribuido de búsqueda y análisis basado en Apache Lucene. Para trabajar con él desde aplicaciones en C# (.NET), existen varios clientes oficiales y de terceros. En este artículo, analizaremos en detalle dos librerías principales: NEST (cliente de alto nivel) y Elastic.Clients.Elasticsearch (nuevo cliente oficial de Elastic). Aprenderá a instalarlos, configurarlos y utilizarlos para indexación, búsqueda y gestión de datos.



1. NEST — Cliente de alto nivel (recomendado para proyectos complejos)



NEST es un cliente antiguo pero probado que proporciona una API fuertemente tipada utilizando clases POCO. Serializa/deserializa automáticamente JSON a objetos C# y admite sintaxis fluida para construir consultas.



Instalación

dotnet add package NEST


Ejemplo de uso de NEST

using Nest;using System;

// Clase POCO para el documentopublic class Article{ public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime PublishDate { get; set; }}

class Program{ static async Task Main(string[] args) { // Configuración de la conexión var settings = new ConnectionSettings(new Uri("http://localhost:9200")) .DefaultIndex("articles") .EnableDebugMode(); // Habilitar registro de consultas

var client = new ElasticClient(settings);

// 1. Indexación de documento var article = new Article { Id = 1, Title = "Elasticsearch en C#", Content = "Guía detallada para trabajar con Elasticsearch desde .NET", PublishDate = DateTime.UtcNow };

var indexResponse = await client.IndexDocumentAsync(article); Console.WriteLine($"Indexación: {indexResponse.IsValid}");

// 2. Búsqueda var searchResponse = await client.SearchAsync<Article>(s => s .Query(q => q .Match(m => m .Field(f => f.Title) .Query("Elasticsearch") ) ) );

foreach (var hit in searchResponse.Hits) { Console.WriteLine($"Encontrado: {hit.Source.Title}"); } }}


2. Elastic.Clients.Elasticsearch — Nuevo cliente oficial



A partir de la versión 8.x, Elastic lanzó un nuevo cliente Elastic.Clients.Elasticsearch (también conocido como Elasticsearch.Net). Es más ligero, asíncrono y compatible con las últimas versiones de Elasticsearch. A diferencia de NEST, no requiere el uso obligatorio de clases POCO, aunque las admite.



Instalación

dotnet add package Elastic.Clients.Elasticsearch


Ejemplo de uso del nuevo cliente

using Elastic.Clients.Elasticsearch;using Elastic.Clients.Elasticsearch.QueryDsl;using System;

class Program{ static async Task Main(string[] args) { // Configuración de la conexión var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200")) .DefaultIndex("articles");

var client = new ElasticsearchClient(settings);

// 1. Indexación con POCO var article = new Article { Id = 2, Title = "Nuevo cliente Elasticsearch", Content = "Resumen de funcionalidades de Elastic.Clients.Elasticsearch", PublishDate = DateTime.UtcNow };

var indexResponse = await client.IndexAsync(article, idx => idx.Index("articles")); Console.WriteLine($"Indexación: {indexResponse.IsValidResponse}");

// 2. Búsqueda usando sintaxis lambda var se

Recommendations