Cliente Elasticsearch para Go (Golang): ferramenta poderosa para trabalhar com busca
\n\nElasticsearch é um sistema de busca e análise distribuído baseado no Apache Lucene, que permite realizar busca em texto completo, agregações e análises em tempo real. Para interagir com o Elasticsearch a partir da linguagem Go (Golang), existe o cliente oficial — go-elasticsearch. Esta é uma biblioteca desenvolvida e mantida pela equipe do Elastic, que fornece um conjunto completo de ferramentas para trabalhar com a REST API do Elasticsearch.
\n\nRecursos e vantagens do go-elasticsearch
\n\nA biblioteca go-elasticsearch oferece aos desenvolvedores Go os seguintes recursos:
\n\n- \n
- Suporte completo à API do Elasticsearch — todas as versões da API, incluindo indexação, busca, agregações, gerenciamento de cluster e configurações. \n
- Funções auxiliares tipadas — simplificam a criação de consultas e o processamento de respostas. \n
- Suporte a operações em lote (bulk) — inserção, atualização e exclusão em massa de documentos. \n
- Gerenciamento automático de conexões — pool de conexões, novas tentativas em caso de erros e balanceamento de carga. \n
- Compatibilidade com módulos Go — instalação e atualização fáceis via
go get. \n - Suporte a contextos (context) — cancelamento de requisições e timeouts. \n
- Extensibilidade — possibilidade de criar transportes e middlewares personalizados. \n
Instalação e configuração
\n\nPara instalar a biblioteca, execute o comando:
\n\ngo get github.com/elastic/go-elasticsearch/v8\n\nApós a instalação, você pode criar um cliente com configurações básicas:
\n\npackage main\n\nimport (\n "log"\n "github.com/elastic/go-elasticsearch/v8"\n)\n\nfunc main() {\n cfg := elasticsearch.Config{\n Addresses: []string{\n "http://localhost:9200",\n },\n }\n es, err := elasticsearch.NewClient(cfg)\n if err != nil {\n log.Fatalf("Erro ao criar cliente: %s", err)\n }\n log.Println("Cliente Elasticsearch criado com sucesso")\n}\n\nPara conectar a um cluster com autenticação, informe o login e a senha:
\n\ncfg := elasticsearch.Config{\n Addresses: []string{"https://your-cluster-url:9200"},\n Username: "elastic",\n Password: "your_password",\n}\n\nOperações principais com dados
\n\nCriação de índice
\n\nres, err := es.Indices.Create("my_index")\nif err != nil {\n log.Fatalf("Erro ao criar índice: %s", err)\n}\ndefer res.Body.Close()\nlog.Println(res.String())\n\nIndexação de documento
\n\nPara adicionar um documento, use o método Index:
package main\n\nimport (\n "bytes"\n "encoding/json"\n "log"\n "github.com/elastic/go-elasticsearch/v8"\n)\n\ntype Book struct {\n Title string `json:"title"`\n Author string `json:"author"`\n Year int `json:"year"`\n}\n\nfunc main() {\n es, _ := elasticsearch.NewClient(elasticsearch.Config{\n Addresses: []string{"http://localhost:9200"},\n })\n\n book := Book{\n Title: "Guerra e Paz",\n Author: "Liev Tolstói",\n Year: 1869,\n }\n\n data, _ := json.Marshal(book)\n res, err := es.Index("books", bytes.NewReader(data))\n if err != nil {\n log.Fatalf("Erro na indexação: %s", err)\n }\n defer res.Body.Close()\n log.Println(res.String())\n}\n\nBusca de documentos
\n\nA busca é realizada através do método Search com o corpo da consulta em formato JSON:
query := `{\n "query": {\n "match": {\n "author": "Tolstói"\n }\n }\n}`\n\nres, err := es.Search(\n es.Search.WithIndex("books"),\n es.Search.WithBody(bytes.NewReader([]byte(query))),\n es.Search.WithPretty(),\n)\nif err