Testen Sie Elasticsearch: Sehen Sie sich unsere Beispiel-Notebooks an, starten Sie eine kostenlose Cloud-Testversion oder testen Sie Elastic jetzt auf Ihrem lokalem Gerät.
Softwareentwicklung in jeder Programmiersprache, einschließlich Go, bedeutet die Verpflichtung zu lebenslangem Lernen. Während ihrer gesamten Universitäts- und Berufslaufbahn musste sich Carly an die Polyglotte anpassen und sich mit vielen Programmiersprachen auseinandersetzen, darunter Python, C, JavaScript, TypeScript und Java. Aber das reichte nicht! Seit Kurzem spielt sie auch Go!
Genau wie Tiere, Programmiersprachen und auch einige Ihrer Lieblingsautoren hat sich die Suche im Laufe der Zeit weiterentwickelt und verschiedene Vorgehensweisen hervorgebracht, bei denen es schwierig sein kann, die richtige für Ihren individuellen Anwendungsfall zu finden. In diesem Blog geben wir einen Überblick über die traditionelle Stichwortsuche und stellen ein Beispiel mit Elasticsearch und dem Elasticsearch Go-Client vor.
Voraussetzungen
Um diesem Beispiel folgen zu können, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:
- Installation von Go Version 1.21 oder höher
- Erstellen Sie Ihr eigenes Go-Repository gemäß der in der Go-Dokumentationbeschriebenen empfohlenen Struktur und Paketverwaltung.
- Erstellung eines eigenen Elasticsearch-Clusters, gefüllt mit einer Reihe von Seiten über Nagetiere, darunter auch für unseren freundlichen Gopher, aus Wikipedia:

Verbindung zu Elasticsearch herstellen
In unseren Beispielen werden wir die vom Go-Client angebotene Typed API verwenden. Um eine sichere Verbindung für jede Anfrage herzustellen, muss der Client auf folgende Weise konfiguriert werden:
- Cloud-ID und API-Schlüssel bei Verwendung von Elastic Cloud.
- Cluster-URL, Benutzername, Passwort und Zertifikat.
Die Verbindung zu unserem Cluster in der Elastic Cloud würde folgendermaßen aussehen:
Die client -Verbindung kann dann, wie später gezeigt wird, für die Suche verwendet werden.
Stichwortsuche
Die Stichwortsuche ist die grundlegende Suchart, mit der wir seit der Entwicklung von Archie, der ersten dokumentierten Internet-Suchmaschine aus dem Jahr 1990, vertraut sind.
Ein zentraler Bestandteil der Stichwortsuche ist die Übersetzung von Dokumenten in einen invertierten Index. Genau wie das Register am Ende eines Lehrbuchs enthält ein invertiertes Register eine Zuordnung zwischen einer Liste von Tokens und deren Position in jedem Dokument. Das folgende Diagramm zeigt die wichtigsten Schritte der Indexerstellung:

Wie oben dargestellt, umfasst die Token-Generierung in Elasticsearch drei Hauptphasen:
- Entfernen unnötiger Zeichen durch Null oder mehr
char_filters. In unserem Beispiel entfernen wir HTML-Elemente innerhalb des Feldesbody_contentmithilfe des Filtershtml_strip. - Die Tokens werden mithilfe des
standardTokenizers vom Inhalt getrennt, wobei die Trennung anhand von Leerzeichen und Satzzeichen erfolgt. - Unerwünschte Tokens werden aus dem Ausgabestream des Tokenizers entfernt oder Tokens mithilfe von null oder mehr
filter-Optionen transformiert, z. B. durch denlowercase-Tokenfilter oder Stemmer wie densnowball-Stemmer , um Tokens wieder in ihre Sprachwurzel umzuwandeln.
Suche in Elasticsearch mit Go
Bei Abfragen mit dem Go-Client geben wir den zu durchsuchenden Index an und übergeben die Abfrage sowie weitere Optionen, wie im folgenden Beispiel:
Im obigen Beispiel führen wir eine Standardabfrage matchdurch, um alle Dokumente in unserem Index zu finden, die die an unsere Funktion übergebene Zeichenkette enthalten. Beachten Sie, dass wir über Do(context.Background()) einen neuen leeren Kontext an die Suchausführung übergeben. Darüber hinaus werden alle von Elasticsearch zurückgegebenen Fehler zur Protokollierung und Fehlerbehandlung an das Attribut err ausgegeben.
Die Ergebnisse werden in res.Hits.Hits zurückgegeben, wobei das Attribut _Source das Dokument selbst im JSON-Format enthält. Um diese Quelle in eine Go-kompatible Struktur umzuwandeln, müssen wir die JSON-Antwort mithilfe des Go -Pakets encoding/json deserialisieren, wie im folgenden Beispiel gezeigt:
Die Suche und das Unmarshalling der Anfrage gopher liefert wie erwartet die Wikipedia-Seite für Gopher zurück:
Wenn wir jedoch What do Gophers eat? fragen, erhalten wir nicht ganz die gewünschten Ergebnisse:
Eine einfache Stichwortsuche ermöglicht es, Ergebnisse performant an Ihre Go-Anwendung zurückzugeben, und zwar auf eine Weise, die wir von den Anwendungen, die wir verwenden, gewohnt sind. Es eignet sich auch hervorragend für exakte Suchbegriffübereinstimmungen, die für Szenarien wie die Suche nach einem bestimmten Unternehmen oder Begriff relevant sind.
Wie wir oben sehen, hat es jedoch aufgrund des Vokabular-Diskrepanzen Probleme, Kontext und Semantik zu identifizieren. Darüber hinaus stellt die Unterstützung von Nicht-Text-Dateiformaten wie Bildern und Audiodateien eine Herausforderung dar.
Fazit
Hier haben wir besprochen, wie man mit dem Elasticsearch Go-Client herkömmliche Textabfragen in Elasticsearch durchführt. Da Go häufig für die Skripterstellung im Infrastrukturbereich und den Aufbau von Webservern verwendet wird, ist es nützlich zu wissen, wie man in Go sucht.
Im GitHub-Repository findet ihr den gesamten Code dieser Serie. Im Anschluss daran folgt Teil 2, um einen Überblick über die Vektorsuche und deren Durchführung in Go zu erhalten. Bis dahin, viel Erfolg bei der Gopherjagd!
