Elasticsearch-Client für C# (.NET): NEST und Elastic.Clients.Elasticsearch
\n\nElasticsearch ist ein leistungsstarkes verteiltes Such- und Analysesystem, das häufig für Volltextsuche, Protokollierung, Überwachung und Datenanalyse verwendet wird. Für die Arbeit mit Elasticsearch aus C# (.NET)-Anwendungen gibt es zwei offizielle Haupt-Clients: NEST (High-Level, mit fluent API) und Elastic.Clients.Elasticsearch (neu, Low-Level, verfügbar ab Version 8.x). In diesem Artikel betrachten wir beide Ansätze im Detail, einschließlich Installation, grundlegender Operationen und Codebeispiele.
\n\n1. Was ist ein Elasticsearch-Client für .NET?
\n\nElasticsearch bietet eine RESTful-API, aber die direkte Arbeit mit HTTP-Anfragen in C# ist umständlich. Offizielle Clients lösen dieses Problem:
\n- \n
- NEST — ein alter, aber zuverlässiger High-Level-Client. Bietet stark typisierte Abfragen, Mapping von POCO-Klassen und eine fluent-Schnittstelle. Empfohlen für Projekte mit .NET Framework und .NET Core 3.1. \n
- Elastic.Clients.Elasticsearch — ein neuer Client (ab Elasticsearch 8.x). Leichtgewichtig, asynchron, mit Unterstützung für .NET 6+. Verwendet System.Text.Json und benötigt keine zusätzlichen Abhängigkeiten. \n
2. Installation der Bibliotheken
\n\nDie Installation erfolgt über NuGet. Für NEST:
\ndotnet add package NEST\nFür den neuen Client:
\ndotnet add package Elastic.Clients.Elasticsearch\n\n3. Verbindung zu Elasticsearch
\n\nBeispiel für die Verbindung mit NEST:
\nvar settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);\n\nBeispiel für die Verbindung mit Elastic.Clients.Elasticsearch:
\nvar settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);\n\n4. Definition des Datenmodells
\n\nFür die Arbeit mit Dokumenten erstellen wir eine POCO-Klasse:
\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. CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen)
\n\n5.1. Dokument indizieren (Erstellen/Aktualisieren)
\nNEST:
\nvar product = new Product { Id = 1, Name = "Laptop", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));\n\nElastic.Clients.Elasticsearch:
\nvar product = new Product { Id = 1, Name = "Laptop", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);\n\n5.2. Dokument nach ID abrufen
\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. Dokument aktualisieren
\nNEST:
\nvar response = await client.UpdateAsync<Product>(1, u => u\n .Index("products")\n .Doc(new Product { Name = "HP Laptop", Price = 80000 }));\n\nElastic.Clients.Elasticsearch:
\nvar response = await client.UpdateAsync<Product>("products", 1, u => u\n .Doc(new Product { Name = "HP Laptop", Price = 80000 }));\n\n5.4. Dokument löschen
\nNEST:
\nvar response = await client.DeleteAsync<Product>(1, d => d.Index("products"));\n\nElastic.Clients.Elasticsearch:
Auch in der Bibliothek
Logging für TypeScript: Die Bibliothek Winston
JWT-Token in Java: Vollständiger Leitfaden zur Arbeit mit JSON Web Tokens
CLI-Framework für PHP (Symfony Console)
Arbeiten mit Daten in JavaScript (Node.js): Die besten Bibliotheken
Maschinelles Lernen mit C# (.NET): Überblick über die Bibliotheken ML.NET, Accord.NET, TensorFlow.NET