Cliente Elasticsearch para Go (Golang): guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente Elasticsearch para Go (Golang): potente herramienta para trabajar con el motor de búsqueda



Elasticsearch es un sistema de búsqueda distribuido y de texto completo, construido sobre Apache Lucene. Para interactuar eficientemente con él desde aplicaciones en Go (Golang), se utiliza el cliente oficial go-elasticsearch. Esta biblioteca proporciona una API conveniente y de alto rendimiento para realizar todas las operaciones principales: desde la indexación de documentos hasta consultas analíticas complejas.



En este artículo, analizaremos en detalle las capacidades de la biblioteca, su instalación, configuración y proporcionaremos ejemplos prácticos de código en Go.



Principales características de go-elasticsearch



  • Soporte completo de la REST API de Elasticsearch — trabajo con índices, documentos, búsqueda, agregaciones y administración del clúster.
  • Consultas con seguridad de tipos — uso de estructuras de Go para construir consultas JSON.
  • Gestión automática de conexiones — pool de conexiones, reintentos en caso de errores, balanceo de carga.
  • Soporte para operaciones bulk — indexación y actualización masiva de documentos.
  • Integración con contextos de Go — cancelación de solicitudes y tiempos de espera.
  • Configuración sencilla — clientes HTTP personalizados, registro, compresión.


Instalación



Para instalar la biblioteca, ejecute el siguiente comando en la terminal:



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


Asegúrese de que su versión de Go sea al menos 1.18. Si está utilizando una versión anterior de Elasticsearch (por ejemplo, 7.x), instale la versión correspondiente del cliente:



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


Conexión y configuración básica



Para comenzar, cree un cliente especificando la dirección del servidor Elasticsearch:



package main

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

func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, // Si se requiere autenticación: // Username: "elastic", // Password: "changeme", }

es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error al crear el cliente: %s", err) }

// Verificar la conexión res, err := es.Info() if err != nil { log.Fatalf("Error al obtener información: %s", err) } defer res.Body.Close()

log.Println(res.String())}


Indexación de documentos



Para agregar un documento a un índice, se utiliza el método Index() o Create(). Veamos un ejemplo con datos tipificados:



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 actualización inmediata }

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

if res.IsError() { return fmt.Errorf("error de indexación: %s", res.String()) }

return nil}


Búsqueda de documentos



Para realizar consultas de búsqueda, se utiliza el método Search(). Ejemplo de búsqueda de texto completo:



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

Recommendations