Elasticsearch .NET pour C# : guide complet avec exemples
1. Qu'est-ce que c'est et pourquoi l'utiliser
Elasticsearch .NET (NEST) est le client officiel de haut niveau pour interagir avec le moteur de recherche Elasticsearch depuis des applications C# et autres langages de la plateforme .NET. Cette bibliothèque fournit une API fortement typée qui permet d'effectuer toutes les opérations Elasticsearch : indexation de documents, recherche, agrégations, gestion des index et des mappings, en utilisant des patterns familiers aux développeurs .NET (LINQ, méthodes asynchrones, sérialisation via System.Text.Json ou Newtonsoft.Json).
Pourquoi utiliser cette bibliothèque ? Elasticsearch est un système distribué puissant de recherche en texte intégral et d'analyse en temps réel. Si votre application C# doit effectuer des recherches complexes sur de gros volumes de données (logs, produits, documents), traiter des requêtes analytiques (agrégations) ou gérer un cluster Elasticsearch par programmation, alors NEST est le choix standard. Il masque les détails de bas niveau des requêtes HTTP et de la sérialisation JSON, offrant une interface fluide et un typage fort.
La bibliothèque prend en charge toutes les versions d'Elasticsearch à partir de la 6.x, et est compatible avec .NET Standard 2.0, ce qui permet de l'utiliser dans des projets .NET Framework 4.6.1+, .NET Core 2.0+ et .NET 5/6/7/8/9. NEST est activement développé par Elastic et la communauté, avec une documentation détaillée et de nombreux exemples.
2. Installation
L'installation se fait via le gestionnaire de packages NuGet. Utilisez l'une des commandes suivantes :
// Via .NET CLI
dotnet add package NEST
// Via la console du gestionnaire de packages
Install-Package NEST
// Ou via l'interface NuGet : recherchez "NEST" et installez la dernière version stable
Vous pouvez également installer le client de bas niveau Elasticsearch.Net, mais NEST l'inclut comme dépendance.
3. Démarrage rapide — exemple minimal fonctionnel
Créez une application console .NET et ajoutez les directives using :
using System;
using System.Threading.Tasks;
using Nest;
using static System.Console;
public class Program
{
public static async Task Main(string[] args)
{
// 1. Configuration de la connexion
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("my_index");
var client = new ElasticClient(settings);
// 2. Définition du modèle de données
var document = new Product
{
Id = 1,
Name = "Ordinateur portable",
Description = "Puissant ordinateur portable gaming",
Price = 1500.99
};
// 3. Indexation du document
var indexResponse = await client.IndexAsync(document, idx => idx.Index("products"));
if (indexResponse.IsValid)
WriteLine($"Document indexé : {indexResponse.Id}");
// 4. Recherche du document
var searchResponse = await client.SearchAsync(s => s
.Index("products")
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("ordinateur")
)
)
);
foreach (var hit in searchResponse.Hits)
{
WriteLine($"Trouvé : {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éthodes/fonctions/classes principales
4.1. ElasticClient.IndexAsync
Signature : Task<IndexResponse> IndexAsync<T>(T document, Func<IndexDescriptor<T>, IIndexRequest<T>> selector = null, CancellationToken ct = default)
Fonction : Indexe (ajoute ou met à jour) un document dans l'index spécifié. Si un document avec le même identifiant existe déjà, il est remplacé.