Client Elasticsearch pour C# (.NET) : NEST et Elastic.Clients.Elasticsearch
\n\nElasticsearch 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\n1. Qu'est-ce qu'un client Elasticsearch pour .NET ?
\n\nElasticsearch 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
2. Installation des bibliothèques
\n\nL'installation se fait via NuGet. Pour NEST :
\ndotnet add package NEST\nPour le nouveau client :
\ndotnet add package Elastic.Clients.Elasticsearch\n\n3. Connexion à Elasticsearch
\n\nExemple de connexion avec NEST :
\nvar settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);\n\nExemple de connexion avec Elastic.Clients.Elasticsearch :
\nvar settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);\n\n4. Définition du modèle de données
\n\nPour travailler avec des documents, créons une classe POCO :
\npublic 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\n5. Opérations CRUD (création, lecture, mise à jour, suppression)
\n\n5.1. Indexation d'un document (création/mise à jour)
\nNEST :
\nvar product = new Product { Id = 1, Name = "Ordinateur portable", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));\n\nElastic.Clients.Elasticsearch :
\nvar product = new Product { Id = 1, Name = "Ordinateur portable", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);\n\n5.2. Récupération d'un document par ID
\nNEST :
\nvar response = await client.GetAsync<Product>(1, g => g.Index("products"));\nvar product = response.Source;\n\nElastic.Clients.Elasticsearch :
\nvar response = await client.GetAsync<Product>("products", 1);\nvar product = response.Source;\n\n5.3. Mise à jour d'un document
\nNEST :
\nvar response = await client.UpdateAsync<Product>(1, u => u\n .Index("products")\n .Doc(new Product { Name = "Ordinateur portable HP", Price = 80000 }));\n\nElastic.Clients.Elasticsearch :
\nvar response = await client.UpdateAsync<Product>("products", 1, u => u\n .Doc(new Product { Name = "Ordinateur portable HP", Price = 80000 }));\n\n5.4. Suppression d'un document
\nNEST :
\nvar response = await client.DeleteAsync<Product>(1, d => d.Index("products"));\n\nElastic.Clients.Elasticsearch :