Elasticsearch-Client für C# (.NET): NEST und Elastic.Clients.Elasticsearch

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Elasticsearch-Client für C# (.NET): NEST und Elastic.Clients.Elasticsearch

\n\n

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

1. Was ist ein Elasticsearch-Client für .NET?

\n\n

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

2. Installation der Bibliotheken

\n\n

Die Installation erfolgt über NuGet. Für NEST:

\n
dotnet add package NEST
\n

Für den neuen Client:

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

3. Verbindung zu Elasticsearch

\n\n

Beispiel für die Verbindung mit NEST:

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

Beispiel für die Verbindung mit Elastic.Clients.Elasticsearch:

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

4. Definition des Datenmodells

\n\n

Für die Arbeit mit Dokumenten erstellen wir eine POCO-Klasse:

\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. CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen)

\n\n

5.1. Dokument indizieren (Erstellen/Aktualisieren)

\n

NEST:

\n
var product = new Product { Id = 1, Name = "Laptop", 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 = "Laptop", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);
\n\n

5.2. Dokument nach ID abrufen

\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. Dokument aktualisieren

\n

NEST:

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

Elastic.Clients.Elasticsearch:

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

5.4. Dokument löschen

\n

NEST:

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

Elastic.Clients.Elasticsearch:

Empfehlungen