Client Elasticsearch pour Go (Golang) : guide complet pour travailler avec ES

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 la recherche

\n\n

Elasticsearch est un système de recherche et d'analyse distribué basé sur Apache Lucene, qui permet d'effectuer des recherches en texte intégral, des agrégations et des analyses en temps réel. Pour interagir avec Elasticsearch depuis le langage Go (Golang), il existe un client officiel — go-elasticsearch. Il s'agit d'une bibliothèque développée et maintenue par l'équipe Elastic, qui offre un ensemble complet d'outils pour travailler avec l'API REST d'Elasticsearch.

\n\n

Fonctionnalités et avantages de go-elasticsearch

\n\n

La bibliothèque go-elasticsearch offre aux développeurs Go les fonctionnalités suivantes :

\n\n
    \n
  • Prise en charge complète de l'API Elasticsearch — toutes les versions de l'API, y compris l'indexation, la recherche, les agrégations, la gestion du cluster et des paramètres.
  • \n
  • Fonctions auxiliaires typées — simplifient la création de requêtes et le traitement des réponses.
  • \n
  • Prise en charge des opérations bulk — insertion, mise à jour et suppression massives de documents.
  • \n
  • Gestion automatique des connexions — pool de connexions, tentatives en cas d'erreur et équilibrage de charge.
  • \n
  • Compatibilité avec les modules Go — installation et mise à jour faciles via go get.
  • \n
  • Prise en charge des contextes (context) — annulation des requêtes et délais d'attente.
  • \n
  • Extensibilité — possibilité de créer ses propres transports et middleware.
  • \n
\n\n

Installation et configuration

\n\n

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

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

Après l'installation, vous pouvez créer un client avec les paramètres de base :

\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("Erreur lors de la création du client : %s", err)\n    }\n    log.Println("Client Elasticsearch créé avec succès")\n}
\n\n

Pour vous connecter à un cluster avec authentification, indiquez le nom d'utilisateur et le mot de passe :

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

Opérations principales avec les données

\n\n

Création d'un index

\n\n
res, err := es.Indices.Create("my_index")\nif err != nil {\n    log.Fatalf("Erreur lors de la création de l'index : %s", err)\n}\ndefer res.Body.Close()\nlog.Println(res.String())
\n\n

Indexation d'un document

\n\n

Pour ajouter un document, utilisez la méthode 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:  "Guerre et Paix",\n        Author: "Léon Tolstoï",\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("Erreur d'indexation : %s", err)\n    }\n    defer res.Body.Close()\n    log.Println(res.String())\n}
\n\n

Recherche de documents

\n\n

La recherche s'effectue via la méthode Search avec un corps de requête au format JSON :

\n\n
query := `{\n    "query": {\n        "match": {\n            "author": "Tolstoï"\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