Cliente Elasticsearch para C++: elasticlient y guía completa

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 para C++: guía completa de elasticlient

\n\n

Elasticsearch es un potente sistema de búsqueda distribuido, construido sobre Apache Lucene. Para interactuar con él desde C++ existen varias bibliotecas. En este artículo, analizaremos en detalle elasticlient: un cliente ligero, moderno y conveniente que utiliza la biblioteca libcurl para solicitudes HTTP y nlohmann/json para trabajar con JSON. Es ideal para integrar funciones de búsqueda en aplicaciones nativas, componentes de servidor y herramientas de análisis de datos.

\n\n

Características principales de elasticlient

\n
    \n
  • Soporte para todas las operaciones principales de Elasticsearch: indexación, actualización, eliminación de documentos.
  • \n
  • Ejecución de consultas de búsqueda con texto completo, filtros y agregaciones.
  • \n
  • Gestión de índices: creación, eliminación, configuración de mapeos.
  • \n
  • Procesamiento por lotes (bulk) para alto rendimiento.
  • \n
  • Soporte para SSL/TLS y autenticación básica.
  • \n
  • Solicitudes asíncronas mediante mecanismos de callback.
  • \n
\n\n

Instalación de la biblioteca

\n

Para compilar elasticlient se necesita un compilador compatible con C++17 y las dependencias instaladas: libcurl (desarrollo) y nlohmann-json. Instalación mediante el gestor de paquetes (Ubuntu/Debian):

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

Compilación desde el código fuente:

\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

Conexión y configuración básica

\n

Para empezar, cree una instancia del cliente especificando la URL de su clúster de Elasticsearch:

\n
#include <elasticlient/client.h>\n#include <iostream>\n\nint main() {\n    elasticlient::Client client({"http://localhost:9200"});\n    // Verificación de la conexión\n    auto ping = client.ping();\n    if (ping.status() == 200) {\n        std::cout << "¡Conexión establecida!" << std::endl;\n    }\n    return 0;\n}
\n

Para un clúster de varios nodos, pase una lista de URL:

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

Trabajo con documentos

\n

Indexación de un nuevo documento (creación o actualización):

\n
#include <nlohmann/json.hpp>\nusing json = nlohmann::json;\n\njson doc = {\n    {"title", "Elasticsearch para C++"},\n    {"content", "Guía detallada sobre el uso del cliente elasticlient"},\n    {"tags", {"cpp", "elasticsearch", "búsqueda"}},\n    {"views", 0}\n};\n\nauto result = client.index("articles", "article", doc.dump(), "1");\nif (result.status() == 201) {\n    std::cout << "Documento creado: " << result.body() << std::endl;\n}
\n

Obtención de un documento por ID:

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

Actualización de un documento existente (parcial):

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

Búsqueda y filtrado

\n

Ejecución de una búsqueda de texto completo utilizando Query DSL:

\n
json searchQuery = {\n    {"query", {\n        {"bool", {\n            {"must", {\n                {{"match", {{"content", "guía"}}}}\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                    

Recommendations