Cliente Elasticsearch para Go (Golang): guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente Elasticsearch para Go (Golang): ferramenta poderosa para trabalhar com o motor de busca



Elasticsearch é um sistema de busca distribuído e de texto completo, construído sobre o Apache Lucene. Para interagir eficientemente com ele a partir de aplicações em Go (Golang), utiliza-se o cliente oficial go-elasticsearch. Esta biblioteca fornece uma API conveniente e performática para realizar todas as operações principais: desde a indexação de documentos até consultas analíticas complexas.



Neste artigo, exploraremos detalhadamente os recursos da biblioteca, sua instalação, configuração e apresentaremos exemplos práticos de código em Go.



Principais recursos do go-elasticsearch



  • Suporte completo à REST API do Elasticsearch — trabalho com índices, documentos, busca, agregações e gerenciamento de cluster.
  • Consultas type-safe — uso de structs Go para construir requisições JSON.
  • Gerenciamento automático de conexões — pool de conexões, tentativas de repetição em caso de erros, balanceamento de carga.
  • Suporte a operações bulk — indexação e atualização em massa de documentos.
  • Integração com contextos Go — cancelamento de requisições e timeouts.
  • Configuração fácil — clientes HTTP personalizados, logging, compressão.


Instalação



Para instalar a biblioteca, execute o comando no terminal:



go get github.com/elastic/go-elasticsearch/v8


Certifique-se de que sua versão do Go seja pelo menos 1.18. Se você estiver usando uma versão mais antiga do Elasticsearch (por exemplo, 7.x), instale a versão correspondente do cliente:



go get github.com/elastic/go-elasticsearch/v7


Conexão básica e configuração



Para começar, crie um cliente informando o endereço do servidor Elasticsearch:



package main

import ( "log" "github.com/elastic/go-elasticsearch/v8")

func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, // Se for necessária autenticação: // Username: "elastic", // Password: "changeme", }

es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Erro ao criar cliente: %s", err) }

// Verificar conexão res, err := es.Info() if err != nil { log.Fatalf("Erro ao obter informações: %s", err) } defer res.Body.Close()

log.Println(res.String())}


Indexação de documentos



Para adicionar um documento a um índice, use o método Index() ou Create(). Veja um exemplo com dados tipados:



type Article struct {    ID      int      `json:"id"`    Title   string   `json:"title"`    Content string   `json:"content"`    Tags    []string `json:"tags"`    Date    string   `json:"date"`}

func indexArticle(es *elasticsearch.Client, article Article) error { body, err := json.Marshal(article) if err != nil { return err }

req := esapi.IndexRequest{ Index: "articles", DocumentID: strconv.Itoa(article.ID), Body: strings.NewReader(string(body)), Refresh: "true", // para atualização imediata }

res, err := req.Do(context.Background(), es) if err != nil { return err } defer res.Body.Close()

if res.IsError() { return fmt.Errorf("erro de indexação: %s", res.String()) }

return nil}


Busca de documentos



Para realizar consultas de busca, use o método Search(). Exemplo de busca de texto completo:



func searchArticles(es *elasticsearch.Client, query string) ([]Article, error) {    var buf bytes.Buffer    searchQuery := map[string]interface{}{        "quer                    

Recommendations