Cliente Elasticsearch para C++: guía completa de elasticlient
\n\nElasticsearch 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.
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
Instalación de la biblioteca
\nPara 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):
sudo apt install libcurl4-openssl-dev nlohmann-json3-dev cmake g++\nCompilación desde el código fuente:
\ngit clone https://github.com/elastic/elasticlient.git\ncd elasticlient\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j4\nsudo make install\n\nConexión y configuración básica
\nPara 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}\nPara un clúster de varios nodos, pase una lista de URL:
\nelasticlient::Client client({\n "http://node1:9200",\n "http://node2:9200",\n "http://node3:9200"\n});\n\nTrabajo con documentos
\nIndexació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}\nObtención de un documento por ID:
\nauto 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}\nActualización de un documento existente (parcial):
\njson updateFields = {\n {"doc", {{"views", 42}}}\n};\nauto updateResult = client.update("articles", "article", "1", updateFields.dump());\n\nBúsqueda y filtrado
\nEjecución de una búsqueda de texto completo utilizando Query DSL:
\njson 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 También en la biblioteca
Validación de datos en Rust: biblioteca validator
Procesamiento de JSON en Kotlin: bibliotecas, análisis y serialización
Generador de códigos QR en Swift: biblioteca EFQRCode para iOS y macOS
Guía completa de Symfony/EventDispatcher para PHP con ejemplos
Pruebas en C++: visión general de frameworks y herramientas (Google Test, Catch2, doctest)