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/v8Asegú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/v7Conexió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 También en la biblioteca
Autorización y autenticación en Swift (iOS/macOS): guía completa
Migraciones de bases de datos en Java: revisión de herramientas y bibliotecas
mimalloc en C++: guía completa con ejemplos prácticos
Serialización de objetos en Kotlin: bibliotecas y ejemplos de código
cereal para C++: guía completa con ejemplos