Elasticsearch-Client für Go (Golang): Ein leistungsstarkes Werkzeug für die Arbeit mit der Suche
\n\nElasticsearch 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\nFunktionen und Vorteile von go-elasticsearch
\n\nDie 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
Installation und Konfiguration
\n\nFühren Sie zur Installation der Bibliothek den folgenden Befehl aus:
\n\ngo get github.com/elastic/go-elasticsearch/v8\n\nNach der Installation können Sie einen Client mit Basiseinstellungen erstellen:
\n\npackage 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\nFür die Verbindung zu einem Cluster mit Authentifizierung geben Sie Benutzername und Passwort an:
\n\ncfg := elasticsearch.Config{\n Addresses: []string{"https://your-cluster-url:9200"},\n Username: "elastic",\n Password: "your_password",\n}\n\nGrundlegende Datenoperationen
\n\nIndex erstellen
\n\nres, 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\nDokument indizieren
\n\nVerwenden Sie die Methode Index, um ein Dokument hinzuzufügen:
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\nDokumente suchen
\n\nDie Suche erfolgt über die Methode Search mit einem Anfragekörper im JSON-Format:
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