Client Elasticsearch C++ : guide complet pour travailler avec le moteur de recherche

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client Elasticsearch C++ : un outil puissant pour la recherche haute performance



Elasticsearch est un système de recherche distribué basé sur Apache Lucene, largement utilisé pour la recherche en texte intégral, l'analyse de logs et le traitement de grands volumes de données. Bien qu'il n'existe pas de client officiel pour C++, les développeurs peuvent interagir efficacement avec Elasticsearch via l'API REST en utilisant la bibliothèque elasticlient — un client C++ léger spécialement conçu pour fonctionner avec Elasticsearch.



La bibliothèque elasticlient fournit une interface pratique pour effectuer toutes les opérations de base : indexation de documents, recherche, mise à jour, suppression et gestion du cluster. Elle est construite au-dessus des bibliothèques libcurl pour les requêtes HTTP et nlohmann/json pour la manipulation du JSON, garantissant ainsi des performances élevées et une compatibilité avec les normes modernes C++17/20.



Principales fonctionnalités d'elasticlient

  • Prise en charge complète de l'API REST Elasticsearch (versions 6.x, 7.x et 8.x)
  • Requêtes asynchrones et synchrones
  • Sérialisation/désérialisation JSON automatique via nlohmann/json
  • Prise en charge des opérations bulk pour le chargement massif de données
  • Gestion des index (création, suppression, configuration du mapping)
  • Travail avec les requêtes de recherche (match, term, range, bool, etc.)
  • Gestion des erreurs et tentatives de reconnexion


Installation et configuration

Pour installer elasticlient, vous pouvez utiliser CMake et vcpkg ou le compiler manuellement. La méthode recommandée est via vcpkg :

# Installation via vcpkgvcpkg install elasticlient

# Intégration dans CMakeLists.txtfind_package(elasticlient REQUIRED)target_link_libraries(my_app PRIVATE elasticlient::elasticlient)


Les dépendances suivantes sont également nécessaires :

  • libcurl (avec support HTTPS)
  • nlohmann/json (version 3.9+)
  • Compilateur C++ avec support C++17 (GCC 8+, Clang 7+, MSVC 2019+)


Exemples d'utilisation de base



Connexion à Elasticsearch

#include <elasticlient/client.h>

int main() { // Création du client avec connexion à une instance locale elasticlient::Client client("http://localhost:9200"); // Vérification de la connexion auto status = client.get("/"); if (status.statusCode() == 200) { std::cout << "Connecté à Elasticsearch !" << std::endl; } return 0;}


Indexation d'un document

#include <elasticlient/client.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() { elasticlient::Client client("http://localhost:9200"); // Création du document json document = { {"title", "Introduction au C++"}, {"author", "Ivan Petrov"}, {"year", 2023}, {"tags", {"programmation", "C++", "manuel"}} }; // Indexation dans l'index "books" avec l'ID "1" auto response = client.index("books", "_doc", "1", document.dump()); if (response.statusCode() == 201) { std::cout << "Document indexé avec succès !" << std::endl; } return 0;}


Recherche de documents

#include <elasticlient/client.h>#include <iostream>

int main() { elasticlient::Client client("http://localhost:9200"); // Requête de recherche json query = { {"query", { {"match", { {"title", "C++"} }} }} }; auto response = client.search("books", "_search", query.dump()); if (response.statusCode() == 200) { auto results = json::parse(response.body()); for (const auto& hit : results["hits"]["hits"]) { std::cout << "Trouvé : " << hit["_source"]["title"] << std::endl; } } retu

Recommendations