Elasticsearch-Client für Rust: Überblick über die Bibliothek elasticsearch-rs

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 Rust: elasticsearch-rs

\n\n

Elasticsearch ist ein leistungsstarkes verteiltes Such- und Analysesystem, das auf Apache Lucene basiert. Für die Interaktion mit Elasticsearch aus Rust-Anwendungen heraus gibt es den offiziellen Client – elasticsearch-rs. Diese Bibliothek bietet einen vollständigen Satz von Werkzeugen für die Arbeit mit der REST-API von Elasticsearch, einschließlich Indizierung, Suche, Aggregationen und Cluster-Verwaltung. In diesem Artikel werden wir die Installation, Konfiguration und die wichtigsten Funktionen von elasticsearch-rs mit Codebeispielen im Detail behandeln.

\n\n

Was ist elasticsearch-rs?

\n

elasticsearch-rs ist der offizielle asynchrone Elasticsearch-Client für die Programmiersprache Rust, entwickelt von der Firma Elastic. Er basiert auf der beliebten asynchronen HTTP-Client-Bibliothek reqwest und bietet eine typsichere API für alle Elasticsearch-Endpunkte. Die Hauptvorteile sind:

\n
    \n
  • Vollständige Unterstützung für Elasticsearch 7.x und 8.x – alle grundlegenden Operationen: CRUD, Suche, Aggregationen, Indexverwaltung.
  • \n
  • Asynchronität – verwendet async/await, was eine effiziente Verarbeitung vieler Anfragen ermöglicht.
  • \n
  • Typsicherheit – Anfrage- und Antwortstrukturen sind streng typisiert, was die Anzahl der Laufzeitfehler reduziert.
  • \n
  • Automatische Serialisierung/Deserialisierung – über serde und serde_json.
  • \n
  • Unterstützung für Authentifizierung – Basic Auth, API-Schlüssel, SSL/TLS.
  • \n
\n\n

Installation

\n

Fügen Sie die Abhängigkeit in Cargo.toml hinzu:

\n
[dependencies]\nelasticsearch = "8.14.0"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\ntokio = { version = "1", features = ["full"] }
\n\n

Grundlegende Verbindung

\n

Erstellen wir einen Client, der eine Verbindung zu einer lokalen Elasticsearch-Instanz herstellt:

\n
use elasticsearch::Elasticsearch;\nuse elasticsearch::http::transport::Transport;\nuse serde_json::json;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let transport = Transport::single_node("http://localhost:9200")?;\n    let client = Elasticsearch::new(transport);\n    // Verbindung prüfen\n    let response = client.ping().send().await?;\n    println!("Elasticsearch verfügbar: {}", response.status_code());\n    Ok(())\n}
\n\n

Grundlegende Operationen: CRUD

\n\n

1. Dokument indizieren

\n

Fügen wir ein Dokument mit Informationen zu einem Buch im Index books hinzu:

\n
#[derive(Serialize, Deserialize, Debug)]\nstruct Book {\n    title: String,\n    author: String,\n    year: u16,\n    isbn: String,\n}\n\nlet book = Book {\n    title: "Rust in Aktion".into(),\n    author: "Tim McNamara".into(),\n    year: 2023,\n    isbn: "978-5-4461-2345-6".into(),\n};\n\nlet response = client\n    .index(IndexParts::IndexId("books", "1"))\n    .body(json!(book))\n    .send()\n    .await?;\n\nprintln!("Dokument indiziert: {:?}", response.body());
\n\n

2. Dokument abrufen

\n
let response = client\n    .get(GetParts::IndexId("books", "1"))\n    .send()\n    .await?;\n\nif response.status_code().is_success() {\n    let book: Book = response.json().await?;\n    println!("Dokument gefunden: {:?}", book);\n}
\n\n

3. Dokument aktualisieren

\n
let response = client\n    .update(UpdateParts::IndexId("books", "1"))\n    .body(json!({\n        "doc": { "year": 2024 }\n    }))\n    .send()\n    .await?;\n\nprintln!("Aktualisiert: {:?}", response.body());
\n\n

4. Dokument löschen

\n
let response = client\n    .delete(DeleteParts::IndexId("books", "1"))\n    .send()\n    .await?;\n\nprintln!("Gelöscht: {:?}", response.body());
\n\n

Suche mit Query DSL

\n

Führen wir eine Volltextsuche im Feld title durch:

\n
use elasticsearch::SearchParts;\n\nl                    

Empfehlungen