Elasticsearch .NET für C#: Vollständiges Tutorial mit Praxisbeispielen
1. Was ist Elasticsearch .NET und warum braucht man es?
Elasticsearch .NET (NEST) ist der offizielle High-Level-Client für die Arbeit mit der Suchmaschine Elasticsearch aus C#-Anwendungen und anderen .NET-Sprachen. Die Bibliothek bietet eine stark typisierte API, mit der Sie alle Elasticsearch-Operationen ausführen können: Dokumentenindexierung, Suche, Aggregationen sowie die Verwaltung von Indizes und Mappings – und das mit vertrauten .NET-Entwicklungsmustern (LINQ, asynchrone Methoden, Serialisierung via System.Text.Json oder Newtonsoft.Json).
Warum ist diese Bibliothek wichtig? Elasticsearch ist ein leistungsstarkes, verteiltes System für Volltextsuche und Echtzeit-Analysen. Wenn Ihre C#-Anwendung komplexe Suchen über große Datenmengen (Logs, Produkte, Dokumente) durchführen, analytische Abfragen (Aggregationen) verarbeiten oder einen Elasticsearch-Cluster programmatisch verwalten muss, ist NEST die Standardwahl. Es verbirgt die Low-Level-Details von HTTP-Anfragen und JSON-Serialisierung und bietet ein flüssiges Interface sowie strenge Typisierung.
Die Bibliothek unterstützt alle Elasticsearch-Versionen ab 6.x und ist mit .NET Standard 2.0 kompatibel. Das ermöglicht den Einsatz in Projekten mit .NET Framework 4.6.1+, .NET Core 2.0+ und .NET 5/6/7/8/9. NEST wird aktiv von Elastic und der Community weiterentwickelt und bietet eine umfangreiche Dokumentation sowie zahlreiche Beispiele.
2. Installation
Die Installation erfolgt über den NuGet Package Manager. Verwenden Sie einen der folgenden Befehle:
// Über .NET CLI
dotnet add package NEST
// Über Package Manager Console
Install-Package NEST
// Oder über die NuGet-Oberfläche: Nach "NEST" suchen und die neueste stabile Version installieren
Sie können auch den Low-Level-Client Elasticsearch.Net installieren, aber NEST enthält diesen bereits als Abhängigkeit.
3. Schnellstart – Minimales funktionierendes Beispiel
Erstellen Sie eine .NET-Konsolenanwendung und fügen Sie die using-Direktiven hinzu:
using System;
using System.Threading.Tasks;
using Nest;
using static System.Console;
public class Program
{
public static async Task Main(string[] args)
{
// 1. Verbindung konfigurieren
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("my_index");
var client = new ElasticClient(settings);
// 2. Datenmodell definieren
var document = new Product
{
Id = 1,
Name = "Laptop",
Description = "Leistungsstarker Gaming-Laptop",
Price = 1500.99
};
// 3. Dokument indexieren
var indexResponse = await client.IndexAsync(document, idx => idx.Index("products"));
if (indexResponse.IsValid)
WriteLine($"Dokument indexiert: {indexResponse.Id}");
// 4. Dokument suchen
var searchResponse = await client.SearchAsync(s => s
.Index("products")
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("Laptop")
)
)
);
foreach (var hit in searchResponse.Hits)
{
WriteLine($"Gefunden: {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. Wichtige Methoden/Funktionen/Klassen
4.1. ElasticClient.IndexAsync
Signatur: Task<IndexResponse> IndexAsync<T>(T document, Func<IndexDescriptor<T>, IIndexRequest<T>> selector = null, CancellationToken ct = default)
Funktion: Indexiert (fügt hinzu oder aktualisiert) ein Dokument im angegebenen Index. Wenn ein Dokument mit derselben ID bereits existiert, wird es überschrieben.
Auch in der Bibliothek
HTML-Parsing in PHP: DOMDocument, SimpleXML und cURL für Web-Scraping
OpenCV für C++: Vollständiger Leitfaden mit Beispielen
QR-Code-Generierung in Java: Bibliothek ZXing (ausführliche Anleitung)