Elasticsearch .NET para C#: guía completa con ejemplos prácticos

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

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.

Recommendations