Elasticsearch-Client für Go (Golang): Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Elasticsearch-Client für Go (Golang): Leistungsstarkes Werkzeug für die Arbeit mit der Suchmaschine



Elasticsearch ist ein verteiltes, volltextbasiertes Suchsystem, das auf Apache Lucene aufbaut. Für die effiziente Interaktion mit Elasticsearch aus Go-Anwendungen (Golang) wird der offizielle Client go-elasticsearch verwendet. Diese Bibliothek bietet eine benutzerfreundliche und leistungsstarke API für alle grundlegenden Operationen – von der Indizierung von Dokumenten bis hin zu komplexen Analyseabfragen.



In diesem Artikel werden wir die Funktionen der Bibliothek, ihre Installation und Konfiguration im Detail besprechen und praktische Codebeispiele in Go zeigen.



Hauptfunktionen von go-elasticsearch



  • Vollständige Unterstützung der Elasticsearch REST API – Arbeit mit Indizes, Dokumenten, Suche, Aggregationen und Cluster-Verwaltung.
  • Typsichere Abfragen – Verwendung von Go-Strukturen zum Erstellen von JSON-Abfragen.
  • Automatische Verbindungsverwaltung – Verbindungspool, Wiederholungsversuche bei Fehlern, Lastverteilung.
  • Unterstützung für Bulk-Operationen – Massenindizierung und -aktualisierung von Dokumenten.
  • Integration mit Go-Kontexten – Abbrechen von Abfragen und Timeouts.
  • Einfache Konfiguration – benutzerdefinierte HTTP-Clients, Logging, Komprimierung.


Installation



Führen Sie zur Installation der Bibliothek den folgenden Befehl im Terminal aus:



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


Stellen Sie sicher, dass Ihre Go-Version mindestens 1.18 ist. Wenn Sie eine ältere Elasticsearch-Version (z. B. 7.x) verwenden, installieren Sie die entsprechende Client-Version:



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


Grundlegende Verbindung und Konfiguration



Erstellen Sie zunächst einen Client, indem Sie die Adresse des Elasticsearch-Servers angeben:



package main

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

func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, // Falls Authentifizierung erforderlich: // Username: "elastic", // Password: "changeme", }

es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Fehler beim Erstellen des Clients: %s", err) }

// Verbindung prüfen res, err := es.Info() if err != nil { log.Fatalf("Fehler beim Abrufen der Informationen: %s", err) } defer res.Body.Close()

log.Println(res.String())}


Indizierung von Dokumenten



Zum Hinzufügen eines Dokuments zu einem Index wird die Methode Index() oder Create() verwendet. Hier ein Beispiel mit typisierten Daten:



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", // für sofortige Aktualisierung }

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

if res.IsError() { return fmt.Errorf("Indizierungsfehler: %s", res.String()) }

return nil}


Suche nach Dokumenten



Zum Ausführen von Suchabfragen wird die Methode Search() verwendet. Beispiel einer Volltextsuche:



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

Empfehlungen