Client Elasticsearch pour C# (.NET) : NEST et Elastic.Clients.Elasticsearch

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client Elasticsearch pour C# (.NET) : NEST et Elastic.Clients.Elasticsearch

\n\n

Elasticsearch est un puissant système de recherche et d'analyse distribué, largement utilisé pour la recherche en texte intégral, la journalisation, la surveillance et l'analyse de données. Pour interagir avec Elasticsearch depuis des applications C# (.NET), il existe deux clients officiels principaux : NEST (haut niveau, avec une API fluide) et Elastic.Clients.Elasticsearch (nouveau, bas niveau, apparu avec la version 8.x). Dans cet article, nous examinerons en détail les deux approches, l'installation, les opérations de base et des exemples de code.

\n\n

1. Qu'est-ce qu'un client Elasticsearch pour .NET ?

\n\n

Elasticsearch fournit une API RESTful, mais travailler directement avec des requêtes HTTP en C# n'est pas pratique. Les clients officiels résolvent ce problème :

\n
    \n
  • NEST — un client haut niveau ancien mais fiable. Il propose des requêtes fortement typées, un mappage de classes POCO et une interface fluide. Recommandé pour les projets sur .NET Framework et .NET Core 3.1.
  • \n
  • Elastic.Clients.Elasticsearch — un nouveau client (à partir d'Elasticsearch 8.x). Léger, asynchrone, avec prise en charge de .NET 6+. Il utilise System.Text.Json et ne nécessite pas de dépendances supplémentaires.
  • \n
\n\n

2. Installation des bibliothèques

\n\n

L'installation se fait via NuGet. Pour NEST :

\n
dotnet add package NEST
\n

Pour le nouveau client :

\n
dotnet add package Elastic.Clients.Elasticsearch
\n\n

3. Connexion à Elasticsearch

\n\n

Exemple de connexion avec NEST :

\n
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n    .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);
\n\n

Exemple de connexion avec Elastic.Clients.Elasticsearch :

\n
var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);
\n\n

4. Définition du modèle de données

\n\n

Pour travailler avec des documents, créons une classe POCO :

\n
public 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\n

5. Opérations CRUD (création, lecture, mise à jour, suppression)

\n\n

5.1. Indexation d'un document (création/mise à jour)

\n

NEST :

\n
var product = new Product { Id = 1, Name = "Ordinateur portable", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));
\n\n

Elastic.Clients.Elasticsearch :

\n
var product = new Product { Id = 1, Name = "Ordinateur portable", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);
\n\n

5.2. Récupération d'un document par ID

\n

NEST :

\n
var response = await client.GetAsync<Product>(1, g => g.Index("products"));\nvar product = response.Source;
\n\n

Elastic.Clients.Elasticsearch :

\n
var response = await client.GetAsync<Product>("products", 1);\nvar product = response.Source;
\n\n

5.3. Mise à jour d'un document

\n

NEST :

\n
var response = await client.UpdateAsync<Product>(1, u => u\n    .Index("products")\n    .Doc(new Product { Name = "Ordinateur portable HP", Price = 80000 }));
\n\n

Elastic.Clients.Elasticsearch :

\n
var response = await client.UpdateAsync<Product>("products", 1, u => u\n    .Doc(new Product { Name = "Ordinateur portable HP", Price = 80000 }));
\n\n

5.4. Suppression d'un document

\n

NEST :

\n
var response = await client.DeleteAsync<Product>(1, d => d.Index("products"));
\n\n

Elastic.Clients.Elasticsearch :

Recommendations