Cliente Elasticsearch C++: guía completa para trabajar con el motor de búsqueda

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente Elasticsearch C++: una potente herramienta para búsquedas de alto rendimiento



Elasticsearch es un sistema de búsqueda distribuido basado en Apache Lucene, ampliamente utilizado para búsqueda de texto completo, análisis de registros y procesamiento de grandes volúmenes de datos. Aunque no existe un cliente oficial para C++, los desarrolladores pueden interactuar eficazmente con Elasticsearch a través de REST API utilizando la biblioteca elasticlient, un cliente C++ ligero creado específicamente para trabajar con Elasticsearch.



La biblioteca elasticlient proporciona una interfaz conveniente para realizar todas las operaciones principales: indexación de documentos, búsqueda, actualización, eliminación y gestión del clúster. Está construida sobre la biblioteca libcurl para solicitudes HTTP y nlohmann/json para trabajar con JSON, lo que garantiza un alto rendimiento y compatibilidad con los estándares modernos de C++17/20.



Características principales de elasticlient

  • Soporte completo para REST API de Elasticsearch (versiones 6.x, 7.x y 8.x)
  • Solicitudes asíncronas y síncronas
  • Serialización/deserialización automática de JSON mediante nlohmann/json
  • Soporte para operaciones bulk para carga masiva de datos
  • Gestión de índices (creación, eliminación, configuración de mapeo)
  • Trabajo con consultas de búsqueda (match, term, range, bool, etc.)
  • Manejo de errores y reintentos de conexión


Instalación y configuración

Para instalar elasticlient se puede usar CMake y vcpkg o compilarlo manualmente. La forma recomendada es mediante vcpkg:

# Instalación mediante vcpkgvcpkg install elasticlient

# Vinculación en CMakeLists.txtfind_package(elasticlient REQUIRED)target_link_libraries(my_app PRIVATE elasticlient::elasticlient)


También se requieren dependencias:

  • libcurl (con soporte HTTPS)
  • nlohmann/json (versión 3.9+)
  • Compilador C++ con soporte para C++17 (GCC 8+, Clang 7+, MSVC 2019+)


Ejemplos básicos de uso



Conexión a Elasticsearch

#include <elasticlient/client.h>

int main() { // Creación del cliente con conexión a la instancia local elasticlient::Client client("http://localhost:9200"); // Verificación de la conexión auto status = client.get("/"); if (status.statusCode() == 200) { std::cout << "¡Conectado a Elasticsearch!" << std::endl; } return 0;}


Indexación de un documento

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

using json = nlohmann::json;

int main() { elasticlient::Client client("http://localhost:9200"); // Creación del documento json document = { {"title", "Introducción a C++"}, {"author", "Iván Petrov"}, {"year", 2023}, {"tags", {"programación", "C++", "manual"}} }; // Indexación en el índice "books" con ID "1" auto response = client.index("books", "_doc", "1", document.dump()); if (response.statusCode() == 201) { std::cout << "¡Documento indexado exitosamente!" << std::endl; } return 0;}


Búsqueda de documentos

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

int main() { elasticlient::Client client("http://localhost:9200"); // Consulta de búsqueda 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 << "Encontrado: " << hit["_source"]["title"] << std::endl; } } retu

Recommendations