Elasticsearch-Client für C++: elasticlient und vollständige Anleitung

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++: vollständige Anleitung zu elasticlient

\n\n

Elasticsearch ist ein leistungsstarkes verteiltes Suchsystem, das auf Apache Lucene basiert. Für die Interaktion mit Elasticsearch aus C++ heraus gibt es mehrere Bibliotheken. In diesem Artikel betrachten wir ausführlich elasticlient – einen leichten, modernen und benutzerfreundlichen Client, der die Bibliothek libcurl für HTTP-Anfragen und nlohmann/json für die Arbeit mit JSON verwendet. Er eignet sich ideal zum Einbetten von Suchfunktionen in native Anwendungen, Serverkomponenten und Datenanalyse-Tools.

\n\n

Hauptfunktionen von elasticlient

\n
    \n
  • Unterstützung aller grundlegenden Elasticsearch-Operationen: Indizierung, Aktualisierung, Löschen von Dokumenten.
  • \n
  • Ausführung von Suchanfragen mit Volltextsuche, Filtern und Aggregationen.
  • \n
  • Verwaltung von Indizes: Erstellen, Löschen, Konfigurieren von Mappings.
  • \n
  • Stapelverarbeitung (Bulk) für hohe Leistung.
  • \n
  • Unterstützung von SSL/TLS und Basisauthentifizierung.
  • \n
  • Asynchrone Anfragen über Callback-Mechanismen.
  • \n
\n\n

Installation der Bibliothek

\n

Zum Erstellen von elasticlient wird ein Compiler mit C++17-Unterstützung sowie die installierten Abhängigkeiten libcurl (Entwicklung) und nlohmann-json benötigt. Installation über den Paketmanager (Ubuntu/Debian):

\n
sudo apt install libcurl4-openssl-dev nlohmann-json3-dev cmake g++
\n

Erstellung aus dem Quellcode:

\n
git clone https://github.com/elastic/elasticlient.git\ncd elasticlient\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j4\nsudo make install
\n\n

Grundlegende Verbindung und Konfiguration

\n

Erstellen Sie zunächst eine Client-Instanz, indem Sie die URL Ihres Elasticsearch-Clusters angeben:

\n
#include <elasticlient/client.h>\n#include <iostream>\n\nint main() {\n    elasticlient::Client client({"http://localhost:9200"});\n    // Verbindung prüfen\n    auto ping = client.ping();\n    if (ping.status() == 200) {\n        std::cout << "Verbindung hergestellt!" << std::endl;\n    }\n    return 0;\n}
\n

Für einen Cluster mit mehreren Knoten übergeben Sie eine Liste von URLs:

\n
elasticlient::Client client({\n    "http://node1:9200",\n    "http://node2:9200",\n    "http://node3:9200"\n});
\n\n

Arbeit mit Dokumenten

\n

Indizierung eines neuen Dokuments (Erstellen oder Aktualisieren):

\n
#include <nlohmann/json.hpp>\nusing json = nlohmann::json;\n\njson doc = {\n    {"title", "Elasticsearch für C++"},\n    {"content", "Ausführliche Anleitung zur Verwendung des elasticlient-Clients"},\n    {"tags", {"cpp", "elasticsearch", "suche"}},\n    {"views", 0}\n};\n\nauto result = client.index("articles", "article", doc.dump(), "1");\nif (result.status() == 201) {\n    std::cout << "Dokument erstellt: " << result.body() << std::endl;\n}
\n

Abrufen eines Dokuments anhand der ID:

\n
auto getResult = client.get("articles", "article", "1");\nif (getResult.status() == 200) {\n    json docJson = json::parse(getResult.body());\n    std::cout << "Titel: " << docJson["_source"]["title"] << std::endl;\n}
\n

Aktualisieren eines vorhandenen Dokuments (teilweise):

\n
json updateFields = {\n    {"doc", {{"views", 42}}}\n};\nauto updateResult = client.update("articles", "article", "1", updateFields.dump());
\n\n

Suche und Filterung

\n

Ausführung einer Volltextsuche mit Query DSL:

\n
json searchQuery = {\n    {"query", {\n        {"bool", {\n            {"must", {\n                {{"match", {{"content", "anleitung"}}}}\n            }},\n            {"filter", {\n                {{"term", {{"tags", "cpp"}}}}\n            }}\n        }}\n    }},\n    {"size", 10}\n};\n\nauto searchResult = client.search("articles", searchQuery.dump());\nif (searchResult.status() == 200) {\n    json                    

Empfehlungen