Client Elasticsearch pour Go (Golang) : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client Elasticsearch pour Go (Golang) : un outil puissant pour travailler avec le moteur de recherche



Elasticsearch est un système de recherche distribué et en texte intégral, construit sur Apache Lucene. Pour interagir efficacement avec lui depuis des applications en Go (Golang), on utilise le client officiel go-elasticsearch. Cette bibliothèque fournit une API pratique et performante pour effectuer toutes les opérations de base : de l'indexation de documents aux requêtes analytiques complexes.



Dans cet article, nous allons détailler les capacités de la bibliothèque, son installation, sa configuration et fournir des exemples pratiques de code en Go.



Fonctionnalités principales de go-elasticsearch



  • Prise en charge complète de l'API REST Elasticsearch — travail avec les index, les documents, la recherche, les agrégations et la gestion du cluster.
  • Requêtes typées — utilisation de structures Go pour construire des requêtes JSON.
  • Gestion automatique des connexions — pool de connexions, tentatives en cas d'erreur, équilibrage de charge.
  • Prise en charge des opérations bulk — indexation et mise à jour massives de documents.
  • Intégration avec les contextes Go — annulation des requêtes et timeouts.
  • Configuration facile — clients HTTP personnalisés, journalisation, compression.


Installation



Pour installer la bibliothèque, exécutez la commande dans le terminal :



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


Assurez-vous que votre version de Go est au moins 1.18. Si vous utilisez une version plus ancienne d'Elasticsearch (par exemple, 7.x), installez la version correspondante du client :



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


Connexion et configuration de base



Pour commencer, créez un client en spécifiant l'adresse du serveur Elasticsearch :



package main

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

func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, // Si une authentification est requise : // Username: "elastic", // Password: "changeme", }

es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Erreur lors de la création du client : %s", err) }

// Vérification de la connexion res, err := es.Info() if err != nil { log.Fatalf("Erreur lors de la récupération des informations : %s", err) } defer res.Body.Close()

log.Println(res.String())}


Indexation de documents



Pour ajouter un document à un index, utilisez la méthode Index() ou Create(). Voici un exemple avec des données typées :



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", // pour une mise à jour immédiate }

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

if res.IsError() { return fmt.Errorf("erreur d'indexation : %s", res.String()) }

return nil}


Recherche de documents



Pour effectuer des requêtes de recherche, utilisez la méthode Search(). Exemple de recherche en texte intégral :



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

Recommendations