Cliente Elasticsearch C++: ferramenta poderosa para busca de alto desempenho
Elasticsearch é um sistema de busca distribuído baseado no Apache Lucene, amplamente utilizado para busca em texto completo, análise de logs e processamento de grandes volumes de dados. Embora não exista um cliente oficial para C++, os desenvolvedores podem interagir eficientemente com o Elasticsearch via REST API usando a biblioteca elasticlient — um cliente C++ leve, criado especificamente para trabalhar com Elasticsearch.
A biblioteca elasticlient fornece uma interface conveniente para realizar todas as operações principais: indexação de documentos, busca, atualização, exclusão e gerenciamento de cluster. Ela é construída sobre a biblioteca libcurl para requisições HTTP e nlohmann/json para manipulação de JSON, garantindo alto desempenho e compatibilidade com os padrões modernos C++17/20.
Principais recursos do elasticlient
- Suporte completo à REST API do Elasticsearch (versões 6.x, 7.x e 8.x)
- Requisições assíncronas e síncronas
- Serialização/desserialização automática de JSON via nlohmann/json
- Suporte a operações bulk para carregamento em massa de dados
- Gerenciamento de índices (criação, exclusão, configuração de mapeamento)
- Trabalho com consultas de busca (match, term, range, bool e outras)
- Tratamento de erros e novas tentativas de conexão
Instalação e configuração
Para instalar o elasticlient, você pode usar CMake e vcpkg ou compilar manualmente. O método recomendado é via vcpkg:
# Instalação via vcpkgvcpkg install elasticlient
# Inclusão no CMakeLists.txtfind_package(elasticlient REQUIRED)target_link_libraries(my_app PRIVATE elasticlient::elasticlient)Também serão necessárias as dependências:
- libcurl (com suporte a HTTPS)
- nlohmann/json (versão 3.9+)
- Compilador C++ com suporte a C++17 (GCC 8+, Clang 7+, MSVC 2019+)
Exemplos básicos de uso
Conexão ao Elasticsearch
#include <elasticlient/client.h>
int main() { // Criando um cliente com conexão à instância local elasticlient::Client client("http://localhost:9200"); // Verificando a conexão auto status = client.get("/"); if (status.statusCode() == 200) { std::cout << "Conectado ao Elasticsearch!" << std::endl; } return 0;}Indexação de documento
#include <elasticlient/client.h>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { elasticlient::Client client("http://localhost:9200"); // Criando um documento json document = { {"title", "Introdução ao C++"}, {"author", "Ivan Petrov"}, {"year", 2023}, {"tags", {"programação", "C++", "livro didático"}} }; // Indexando no índice "books" com ID "1" auto response = client.index("books", "_doc", "1", document.dump()); if (response.statusCode() == 201) { std::cout << "Documento indexado com sucesso!" << std::endl; } return 0;}Busca de documentos
#include <elasticlient/client.h>#include <iostream>
int main() { elasticlient::Client client("http://localhost:9200"); // Consulta de busca 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 Também na biblioteca
Viper para Go: guia completo com exemplos
Biblioteca GraphQL JavaScript (Node.js): Guia Completo sobre Apollo Server e Ferramentas
Envio de SMS em Go (Golang): integração com API de biblioteca