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

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): una potente herramienta para trabajar con búsquedas

\n\n

Elasticsearch es un sistema de búsqueda y análisis distribuido basado en Apache Lucene que permite realizar búsquedas de texto completo, agregaciones y análisis en tiempo real. Para interactuar con Elasticsearch desde el lenguaje Go (Golang), existe un cliente oficial: go-elasticsearch. Esta es una biblioteca desarrollada y mantenida por el equipo de Elastic que proporciona un conjunto completo de herramientas para trabajar con la API REST de Elasticsearch.

\n\n

Características y ventajas de go-elasticsearch

\n\n

La biblioteca go-elasticsearch ofrece a los desarrolladores de Go las siguientes capacidades:

\n\n
    \n
  • Soporte completo de la API de Elasticsearch — todas las versiones de la API, incluyendo indexación, búsqueda, agregaciones, gestión del clúster y configuraciones.
  • \n
  • Funciones auxiliares tipadas — simplifican la creación de consultas y el procesamiento de respuestas.
  • \n
  • Soporte para operaciones bulk — inserción, actualización y eliminación masiva de documentos.
  • \n
  • Gestión automática de conexiones — pool de conexiones, reintentos en caso de errores y balanceo de carga.
  • \n
  • Compatibilidad con módulos Go — instalación y actualización sencillas mediante go get.
  • \n
  • Soporte de contextos (context) — cancelación de solicitudes y tiempos de espera.
  • \n
  • Extensibilidad — posibilidad de crear transportes y middleware personalizados.
  • \n
\n\n

Instalación y configuración

\n\n

Para instalar la biblioteca, ejecute el comando:

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

Después de la instalación, puede crear un cliente con configuraciones 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("Error al crear el cliente: %s", err)\n    }\n    log.Println("Cliente Elasticsearch creado exitosamente")\n}
\n\n

Para conectarse a un clúster con autenticación, especifique el usuario y la contraseña:

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

Operaciones principales con datos

\n\n

Creación de un índice

\n\n
res, err := es.Indices.Create("my_index")\nif err != nil {\n    log.Fatalf("Error al crear el índice: %s", err)\n}\ndefer res.Body.Close()\nlog.Println(res.String())
\n\n

Indexación de un documento

\n\n

Para agregar un documento, use el 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 y paz",\n        Author: "León 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("Error al indexar: %s", err)\n    }\n    defer res.Body.Close()\n    log.Println(res.String())\n}
\n\n

Búsqueda de documentos

\n\n

La búsqueda se realiza mediante el método Search con el cuerpo de la consulta en 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