Von der Vektorsuche bis hin zu leistungsstarken REST-APIs bietet Elasticsearch Entwicklern das umfangreichste Such-Toolkit. Sehen Sie sich die Beispiel-Notebooks auf GitHub an, um etwas Neues testen. Sie können auch noch heute Ihre kostenlose Testversion starten oder Elasticsearch lokal ausführen.
In den vorherigen Teilen dieser Serie wurde gezeigt, wie man den Elasticsearch Go-Client für die traditionelle Stichwortsuche und die Vektorsuche verwendet. Dieser dritte Teil behandelt die hybride Suche. Wir zeigen Ihnen Beispiele , wie Sie Vektorsuche und Stichwortsuche mit Elasticsearch und dem Elasticsearch Go-Client kombinieren können.
Voraussetzungen
Genau wie im ersten Teil dieser Reihe gelten auch für dieses Beispiel folgende Voraussetzungen:
- 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.
- Erstellen 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
Zur Erinnerung: 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 für Suchvorgänge verwendet werden, wie in den nachfolgenden Abschnitten gezeigt wird.
Manuelles Boosting für Hybridsuche
Bei der Kombination beliebiger Suchalgorithmen bestand der traditionelle Ansatz darin, Konstanten manuell zu konfigurieren, um jeden Abfragetyp zu verstärken. Genauer gesagt wird für jede Anfrage ein Faktor festgelegt, und das kombinierte Ergebnisset wird mit dem erwarteten Set verglichen, um die Trefferquote der Anfrage zu bestimmen. Dann wiederholen wir den Vorgang für mehrere Faktorensätze und wählen denjenigen aus, der unserem gewünschten Zustand am nächsten kommt.
Beispielsweise kann die Kombination einer einzelnen Textsuchanfrage mit einem Gewichtungsfaktor von 0.8 mit einer kNN-Abfrage mit einem niedrigeren Gewichtungsfaktor von 0.2 durch Angabe des Feldes Boost in beiden Abfragetypen erfolgen, wie im folgenden Beispiel gezeigt:
Der in der Option Boost für jede Abfrage angegebene Faktor wird zur Dokumentbewertung addiert. Indem wir den Score unserer Match-Abfrage um einen größeren Faktor erhöhen als den der KNN-Abfrage, werden die Ergebnisse der Keyword-Abfrage stärker gewichtet.
Die Herausforderung beim manuellen Boosting, insbesondere wenn man kein Suchmaschinenexperte ist, besteht darin, dass es eine Feinabstimmung erfordert, um die Faktoren herauszufinden, die zum gewünschten Ergebnis führen. Es geht einfach darum, verschiedene Werte auszuprobieren, um zu sehen, welcher Wert Sie dem gewünschten Ergebnis näherbringt.
Reciprocal Rank Fusion in hybrid search & Go client
Reciprocal Rank Fusion, oder RRF, wurde in Elasticsearch 8.9 als technische Vorschau für die hybride Suche veröffentlicht. Ziel ist es, den Lernaufwand für die Feinabstimmung zu reduzieren und den Zeitaufwand für das Experimentieren mit Faktoren zur Optimierung des Ergebnissatzes zu verringern.
Bei RRF wird die Dokumentenbewertung durch Mischen der Bewertungen mithilfe des folgenden Algorithmus neu berechnet:
Der Vorteil der Verwendung von RRF besteht darin, dass wir die sinnvollen Standardwerte in Elasticsearch nutzen können. Die Rangkonstante k ist standardmäßig auf 60 gesetzt. Um einen Kompromiss zwischen der Relevanz der zurückgegebenen Dokumente und der Abfrageleistung bei der Suche in großen Datensätzen zu erzielen, ist die Größe des Ergebnissatzes für jede betrachtete Abfrage auf den Wert window_size begrenzt, der standardmäßig auf 100 eingestellt ist, wie in der Dokumentation beschrieben.
k und windows_size kann auch innerhalb der Rrf -Konfiguration innerhalb der Rank -Methode im Go-Client konfiguriert werden, wie im folgenden Beispiel gezeigt:
Fazit
Hier haben wir besprochen, wie man Vektor- und Stichwortsuche in Elasticsearch mithilfe des Elasticsearch Go-Clients kombiniert.
Im GitHub-Repository findet ihr den gesamten Code dieser Serie. Falls Sie es noch nicht getan haben, schauen Sie sich Teil 1 und Teil 2 an, um den gesamten Code dieser Serie zu finden.
Viel Spaß bei der Gopherjagd!




