Elasticsearch-Client für Go (Golang): Vollständige Anleitung zur Arbeit mit ES

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): Ein leistungsstarkes Werkzeug für die Arbeit mit der Suche

\n\n

Elasticsearch ist ein verteiltes Such- und Analysesystem auf Basis von Apache Lucene, das Volltextsuche, Aggregationen und Echtzeitanalysen ermöglicht. Für die Interaktion mit Elasticsearch aus der Sprache Go (Golang) gibt es einen offiziellen Client – go-elasticsearch. Diese Bibliothek wird vom Elastic-Team entwickelt und gepflegt und bietet einen vollständigen Satz von Werkzeugen für die Arbeit mit der REST-API von Elasticsearch.

\n\n

Funktionen und Vorteile von go-elasticsearch

\n\n

Die Bibliothek go-elasticsearch bietet Go-Entwicklern die folgenden Funktionen:

\n\n
    \n
  • Vollständige Unterstützung der Elasticsearch-API – alle API-Versionen, einschließlich Indizierung, Suche, Aggregationen, Cluster- und Einstellungsverwaltung.
  • \n
  • Typisierte Hilfsfunktionen – vereinfachen die Erstellung von Anfragen und die Verarbeitung von Antworten.
  • \n
  • Unterstützung für Bulk-Operationen – Masseneinfügen, -aktualisieren und -löschen von Dokumenten.
  • \n
  • Automatische Verbindungsverwaltung – Verbindungspool, Wiederholungsversuche bei Fehlern und Lastausgleich.
  • \n
  • Kompatibilität mit Go-Modulen – einfache Installation und Aktualisierung über go get.
  • \n
  • Unterstützung von Kontexten (context) – Anfrageabbrüche und Timeouts.
  • \n
  • Erweiterbarkeit – Möglichkeit zur Erstellung eigener Transports und Middleware.
  • \n
\n\n

Installation und Konfiguration

\n\n

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

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

Nach der Installation können Sie einen Client mit Basiseinstellungen erstellen:

\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("Fehler beim Erstellen des Clients: %s", err)\n    }\n    log.Println("Elasticsearch-Client erfolgreich erstellt")\n}
\n\n

Für die Verbindung zu einem Cluster mit Authentifizierung geben Sie Benutzername und Passwort an:

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

Grundlegende Datenoperationen

\n\n

Index erstellen

\n\n
res, err := es.Indices.Create("my_index")\nif err != nil {\n    log.Fatalf("Fehler beim Erstellen des Index: %s", err)\n}\ndefer res.Body.Close()\nlog.Println(res.String())
\n\n

Dokument indizieren

\n\n

Verwenden Sie die Methode Index, um ein Dokument hinzuzufügen:

\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:  "Krieg und Frieden",\n        Author: "Lew Tolstoi",\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("Fehler bei der Indizierung: %s", err)\n    }\n    defer res.Body.Close()\n    log.Println(res.String())\n}
\n\n

Dokumente suchen

\n\n

Die Suche erfolgt über die Methode Search mit einem Anfragekörper im JSON-Format:

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

Empfehlungen