Cliente Elasticsearch para Go (Golang): guia completo para trabalhar com ES

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 busca

\n\n

Elasticsearch é 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\n

Recursos e vantagens do go-elasticsearch

\n\n

A 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
\n\n

Instalação e configuração

\n\n

Para instalar a biblioteca, execute o comando:

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

Após a instalação, você pode criar um cliente com configurações básicas:

\n\n
package 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\n

Para conectar a um cluster com autenticação, informe o login e a senha:

\n\n
cfg := elasticsearch.Config{\n    Addresses: []string{"https://your-cluster-url:9200"},\n    Username:  "elastic",\n    Password:  "your_password",\n}
\n\n

Operações principais com dados

\n\n

Criação de índice

\n\n
res, 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\n

Indexação de documento

\n\n

Para adicionar um documento, use o método Index:

\n\n
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\n

Busca de documentos

\n\n

A busca é realizada através do método Search com o corpo da consulta em formato JSON:

\n\n
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                    

Recommendations