Elasticsearch .NET para C# (.NET): guía completa con ejemplos prácticos
1. ¿Qué es y para qué sirve?
Elasticsearch .NET (NEST) es el cliente oficial de alto nivel para interactuar con el motor de búsqueda Elasticsearch desde aplicaciones en C# y otros lenguajes de la plataforma .NET. Esta librería ofrece una API fuertemente tipada que permite realizar todas las operaciones con Elasticsearch: indexación de documentos, búsquedas, agregaciones, gestión de índices y mapeos, utilizando patrones familiares para desarrolladores .NET (LINQ, métodos asíncronos, serialización con System.Text.Json o Newtonsoft.Json).
¿Para qué sirve esta librería? Elasticsearch es un potente sistema distribuido de búsqueda de texto completo y análisis en tiempo real. Si tu aplicación en C# necesita realizar búsquedas complejas sobre grandes volúmenes de datos (logs, productos, documentos), procesar consultas analíticas (agregaciones) o gestionar un clúster de Elasticsearch de forma programática, NEST es la opción estándar. Oculta los detalles de bajo nivel de las solicitudes HTTP y la serialización JSON, proporcionando una interfaz fluida y tipado estricto.
La librería es compatible con todas las versiones de Elasticsearch desde la 6.x, así como con .NET Standard 2.0, lo que permite usarla en proyectos .NET Framework 4.6.1+, .NET Core 2.0+ y .NET 5/6/7/8/9. NEST es mantenido activamente por Elastic y la comunidad, cuenta con documentación detallada y numerosos ejemplos.
2. Instalación
La instalación se realiza a través del Administrador de Paquetes NuGet. Usa uno de los siguientes comandos:
// Mediante .NET CLI
dotnet add package NEST
// Mediante Package Manager Console
Install-Package NEST
// O a través de la interfaz de NuGet: busca "NEST" e instala la última versión estable
También puedes instalar el cliente de bajo nivel Elasticsearch.Net, pero NEST ya lo incluye como dependencia.
3. Inicio rápido — ejemplo mínimo funcional
Crea una aplicación de consola .NET y agrega las directivas using:
using System;
using System.Threading.Tasks;
using Nest;
using static System.Console;
public class Program
{
public static async Task Main(string[] args)
{
// 1. Configuración de la conexión
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("my_index");
var client = new ElasticClient(settings);
// 2. Definición del modelo de datos
var document = new Product
{
Id = 1,
Name = "Laptop",
Description = "Laptop gaming de alto rendimiento",
Price = 1500.99
};
// 3. Indexación del documento
var indexResponse = await client.IndexAsync(document, idx => idx.Index("products"));
if (indexResponse.IsValid)
WriteLine($"Documento indexado: {indexResponse.Id}");
// 4. Búsqueda del documento
var searchResponse = await client.SearchAsync(s => s
.Index("products")
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("laptop")
)
)
);
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. Métodos/funciones/clases principales
4.1. ElasticClient.IndexAsync
Firma: Task<IndexResponse> IndexAsync<T>(T document, Func<IndexDescriptor<T>, IIndexRequest<T>> selector = null, CancellationToken ct = default)
Qué hace: Indexa (agrega o actualiza) un documento en el índice especificado. Si ya existe un documento con el mismo ID, lo reemplaza. Devuelve un objeto IndexResponse con el resultado de la operación.
También en la biblioteca
Trabajo con archivos ZIP en Java: guía completa de java.util.zip
Configuración de aplicaciones PHP: bibliotecas y herramientas para una configuración flexible
Procesamiento de imágenes en Kotlin: resize y crop con la biblioteca ImageMagick
Colly para Go: guía completa con ejemplos prácticos