Elastic Search: Erstellen einer semantischen Suche
Überblick
Einführung in Elastic Search
Lernen Sie Elasticsearch kennen und erfahren Sie überblicksmäßig, wie Sie mit Elastic Cloud Ihre Daten ingestieren und einsehen können.
Beachten Sie bei Ihrem Einstieg in die Vektorsuche, dass es davon zwei Formen gibt: die Suche mit „dicht besetzten“ Vektoren (die sogenannte kNN-Vektorsuche) und die Suche mit „dünn besetzten“ Vektoren, wie z. B. Elastic Learned Sparse Encoder (ELSER).
Elastic bietet eine Vielzahl von Suchtechniken, angefangen bei BM25, dem Industriestandard für die textuelle Suche. Diese bietet präzise Treffer bei spezifischen Suchanfragen mit genauen Ergebnissen für exakte Suchbegriffe und kann durch Feinjustierung immer besser werden.
Elastic bietet für die semantische Suche ein vorkonfiguriertes Modell: das „Learned Sparse Encoder“-Modell. Dieses Modell schneidet bei einer Vielzahl von Datenbeständen, wie z. B. Finanzdaten, Wetterdaten und Frage-Antwort-Paaren, besser ab als andere. Es ist so aufgebaut, dass es Fachbereiche übergreifend eine hohe Relevanz bietet, ohne dass es einer zusätzlichen Feinjustierung bedarf.
Die folgende interaktive Demo zeigt, wie Suchergebnisse relevanter werden, wenn Sie das „Learned Sparse Encoder“-Modell von Elastic gegen den textuellen BM25-Algorithmus von Elastic testen.
Darüber hinaus unterstützt Elastic auch dicht besetzte Vektoren, um eine Ähnlichkeitssuche in unstrukturierten Daten jenseits von Text zu ermöglichen, also z. B. in Videos, Bildern und Audio.
Die semantische Suche und die Vektorsuche haben beide den Vorteil, dass Kunden mit diesen Technologien Suchanfragen in natürlicher Sprache stellen können. Wenn jemand z. B. nach Arbeitsplatzrichtlinien für einen Nebenerwerbsjob suchen möchte, könnte die Person in ihrer Suche auch den Begriff „Side Hustle“ verwenden, obwohl dieser Begriff in einem offiziellen HR-Dokument eher nicht auftreten würde.
In dieser Anleitung zeigen wir, wie Sie mit nur wenigen Klicks ein Elastic Cloud-Konto erstellen, Daten mit dem Elastic-Web-Crawler ingestieren und eine semantische Suche implementieren können.
Onboarding der Daten
Elastic Cloud-Konto erstellen
Registrieren Sie sich zunächst einmal, um Elastic Cloud 14 Tage lang kostenlos ausprobieren zu können. Öffnen Sie cloud.elastic.co, erstellen Sie ein Konto und folgen Sie den Schritten unten, um herauszufinden, wie Sie Ihren ersten Elastic Stack in einer unserer mehr als 50 unterstützten Regionen weltweit starten können.
Wenn Sie auf Edit setting klicken, können Sie einen Cloud-Anbieter – Google Cloud, Microsoft Azure oder AWS – auswählen. Anschließend werden Sie um die Auswahl der zugehörigen Region gebeten. Als Nächstes können Sie festlegen, welches Hardware-Profil verwendet werden soll, und so das Deployment besser an Ihre Anforderungen anpassen. Zudem wurde bereits die neueste Version von Elastic vorausgewählt.
Beim Erstellen Ihres Deployments erhalten Sie einen Nutzernamen und ein Passwort. Denken Sie daran, die Informationen herunterzuladen oder zu kopieren, da Sie sie für die Installation Ihrer Integrationen benötigen.
Ingestieren von Daten mit dem Elastic-eigenen Web-Crawler
Nachdem Sie nun Ihr Deployment erstellt haben, können Sie damit beginnen, Daten an Elastic zu senden. Dazu werden wir den Web-Crawler von Elastic verwenden. Wählen Sie als Erstes die Kachel Build a semantic search experience aus.
Als Nächstes sehen Sie eine Seite, auf der Sie mit einer der folgenden Methoden die semantische Suche einrichten können:
- Elastic Learned Sparse Encoder
- Vektorsuche
- NLP-Anreicherung
Alle diese Funktionen sind neben anderen Teil der Elasticsearch Relevance Engine (ESRE).
Sehen wir uns im Rahmen dieser Anleitung an, wie sich mit Elastic Learned Sparse Encoder und der Vektorsuche eine semantische Suche einrichten lässt.
HINWEIS: Wenn Sie sich mit der semantischen Suche noch nicht so gut auskennen und Text durchsuchen möchten, sollten Sie sich zunächst die Anleitung für Elastic Learned Sparse Encoder ansehen. Die Anleitung für die kNN-Vektorsuche ist möglicherweise besser für Nutzer:innen geeignet, die einige der folgenden Kriterien erfüllen:
- Sie haben Zugang zu Data Science oder verfügen über Data-Science-Kenntnisse
- Sie haben festgestellt, dass das integrierte Modell „Elastic Learned Sparse Encoder“ für die semantische Suche für ihre Anwendungsfälle nicht besonders gut geeignet ist
- Sie haben Erfahrungen im Vergleichen von Einbettungsmodellen und der möglichen Feinjustierung von ML-Modellen
- Sie sind sich bewusst, dass für die schnelle kNN-Suche große RAM-Ressourcen erforderlich sind
Wenn Sie bereit sind, wählen Sie Ihre bevorzugte Methode für das Erstellen einer KI-basierten Suchanwendung aus.
Bei beiden Methoden müssen wir als Erstes Create an index auswählen. Anschließend können wir den Web-Crawler auswählen, um das Ingestieren unserer Daten zu starten.
Jetzt richten wir den Web-Crawler ein. Sehen Sie sich dazu diese angeleitete Tour an oder folgen Sie den Anweisungen unten:
Als Nächstes erstellen wir einen Index. In dieser Anleitung ingestieren wir Blogposts von elastic.co.
Wir geben einen Namen für den Index ein und wählen dann Create index aus. Als Nächstes müssen wir die Domäne validieren (Validate Domain) und die Domäne hinzufügen (Add domain).
Wenn erforderlich, wählen wir nach dem Hinzufügen der Domäne unten rechts Edit aus, um eine Unterdomäne hinzuzufügen.
Als Nächstes wählen wir Crawl rules aus und fügen Regeln für das Crawlen hinzu, wie unten dargestellt.*
Wenn wird dann später unser Feld auswählen, überschreiten einige Felder die Anzahl von 512 Token, z. B. das Feld body_content . Um nur die relevanten Teile der Blogposts herauszufiltern, empfiehlt es sich, Extraktionsregeln zu verwenden.
Dazu klicken wir unter Extraction rules auf Add content extraction rule.
Wir geben dann unter Rule description einen aussagekräftigen Namen für die Regel ein, an dem sich ablesen lässt, welche Daten nach dieser Regel extrahiert werden. Für die Zwecke dieser Anleitung nennen wir die Regel „main“.
Jetzt wählen wir Apply to all URLs und dann Add content fields aus. Daraufhin öffnet sich ein Flyout. Wir füllen die Felder aus und wählen die folgenden Kriterien aus:
- Document field:
- Field name: main
- Source:
- Extract content from: HTML element
- CSS selector or XPath expression: main
- Content
- Use content from: Extracted value
- Store extracted content as: A string
Anschließend klicken wir auf Save und dann auf Save rule.
Arbeiten mit Elasticsearch und ESRE
Ingestieren und Durchsuchen Ihrer Daten mit Elastic Learned Sparse Encoder
Wenn Sie sich die oben empfohlenen Kriterien für den Einstieg in die Vektorsuche angesehen haben und diese Methode bevorzugen, gehen Sie links zu Search your data using kNN vector search und befolgen Sie die Anweisungen.
Wenn Sie lieber das für die semantische Suche vorkonfigurierte Modell „Elastic Learned Sparse Encoder“ verwenden möchten, halten Sie sich an die Anweisungen unten.
Dazu wählen wir erst oben Copy and customize und dann Pipelines und Unlock your custom pipelines aus. Als Nächstes wählen wir unter Machine Learning Inference Pipelines die Option Deploy aus, um das Modell herunterzuladen und es in unserem Elasticsearch-Deployment zu installieren.
Wenn das geschafft ist, wählen wir Start single-threaded und dann + Add Inference Pipeline. Als Nächstes machen wir Folgendes:
- Wir wählen eine neue oder vorhandene Pipeline aus.
- Wir geben einen Namen für die Pipeline ein.
- Zum Schluss wählen wir im Dropdown „Select trained ML Model“ die Option ELSER Text Expansion aus und klicken dann auf Continue.
Jetzt müssen wir die Felder auswählen, auf die ELSER Text Expansion angewendet werden soll. Wir wählen als Quellfelder „title“ und „main“ aus und klicken dann auf Add.
Als Nächstes klicken wir auf Continue.
Den Schritt Test your pipeline results überspringen wir, indem wir auf Continue und dann auf Create pipeline klicken.
Damit ist die Pipeline erstellt. Als Nächstes klicken wir rechts oben auf Crawl und dann auf Crawl all domains on this index.
Jetzt kann es mit dem Suchen nach den gewünschten Informationen losgehen. Dafür gibt es zwei empfohlene Methoden:
- Verwenden der Dev Tools
- Nutzen der Funktion Search Application als Endpoint für Ihre Anwendung
Wann ist welche Methode die richtige?
- Wenn Sie Entwickler:in sind und vorhaben, eine Suche (z. B. für Ihre Webanwendung) zu implementieren, sollten Sie die Dev Tools verwenden, um die Suchergebnisse aus Ihren indexierten Daten zu testen und feinzujustieren.
- Wenn Sie einen Suche-Endpoint erstellen möchten, an den Sie von Ihrer eigenen Anwendung aus Suchanfragen senden und Suchergebnisse zurückgeben können, sollten Sie die Funktion Search Application verwenden.
Einen kurzen Überblick über die Verwendung der Dev Tools und der Funktion Search Application erhalten Sie in den folgenden beiden kurzen Videos. Informationen zu deren Verwendung erhalten Sie auch in dieser angeleiteten Tour.
Ingestieren und Durchsuchen Ihrer Daten mit einer kNN-Vektorsuche
Wenn Sie Elastic nutzen, können Sie die Vorteile der kNN-Vektorsuche in Ihrer gesamten Umgebung nutzen. Wie bereits erwähnt, können Sie mit der kNN-Vektorsuche auch in anderen Daten als Text suchen, z. B. in Bildern oder Audio.
Nachdem Sie die Daten mit dem Web-Crawler ingestiert haben, müssen Sie ein Einbettungsmodell in Elasticsearch laden, um Vektoren für Ihre Daten zu generieren. Wie das geht, erfahren Sie im folgenden Video.
Dazu wählen wir erst oben Copy and customize und dann Pipelines und Unlock your custom pipelines aus. Als Nächstes wählen wir unter Machine Learning Inference Pipelines die Option Deploy aus, um das Modell herunterzuladen und es in unserem Elasticsearch-Deployment zu installieren.
Wenn das geschafft ist, wählen wir Start single-threaded und dann + Add Inference Pipeline. Als Nächstes machen wir Folgendes:
- Wir wählen eine neue oder vorhandene Pipeline aus.
- Wir geben einen Namen für die Pipeline ein.
- Zum Schluss wählen wir im Dropdown „Select trained ML Model“ die Option Dense Vector Text Embedding aus und klicken dann auf Continue.
Jetzt müssen wir die Felder auswählen, auf die die Erweiterung des dicht besetzten Vektors angewendet werden soll. Da wir den Web-Crawler verwenden, werden in der Standardeinstellung die Felder angezeigt, die ausgewählt werden können. Für die Zwecke dieser Anleitung wählen wir title aus, um die Suche für ein neues Feld zu starten, und klicken dann auf Continue.
Als Nächstes klicken wir auf Continue und dann auf Create pipeline.
Jetzt müssen wir die Zuordnung für das Feld „dense_vector“ aktualisieren. (Hinweis: Ab Elasticsearch Version 8.8 sollte dieser Schritt automatisch erfolgen.)
- Wir klicken im Navigationsmenü auf Dev Tools. Wenn die Dev Tools zum ersten Mal geöffnet werden, ist es möglicherweise nötig, im Flyout auf Dismiss zu klicken.
- Wir aktualisieren unter Dev Tools im Tab „Console“ die Zuordnung für das Zielfeld unseres kNN-Vektors. Dazu verwenden wir den folgenden Code. Wir fügen den Code einfach in das Codefeld ein und klicken dann rechts neben Zeile 1 auf den kleinen Pfeil.
POST search-blogs/_mapping
{
"properties": {
"title-vector": {
"type": "dense_vector",
"dims": 768,
"index": true,
"similarity": "dot_product"
}
}
}
Wichtig: „search-blogs“ muss hier durch den Namen unseres Index ersetzt werden. Für „title-vector“ muss der Name des Feldes eingegeben werden, in dem die Vektoren gespeichert werden sollen.
Damit ist die Pipeline erstellt. Als Nächstes klicken wir rechts oben auf Crawl und dann auf Crawl all domains on this index.
Jetzt ist es an der Zeit, eine kNN-Vektorsuche auszuführen, um die gewünschten Informationen zu finden. Das können wir mit Dev Tools tun. Wie Sie dabei genau vorgehen müssen, erfahren Sie im folgenden Video.
Wie geht es weiter?
Vielen Dank, dass Sie mit Elastic Cloud eine semantische Suche für Ihre Daten eingerichtet haben. Für Ihre Elastic-Journey sollten Sie die wichtigsten operativen, Security- und Datenkomponenten kennen, die Sie als Nutzer:in verwalten müssen, wenn Sie einen Cluster in Ihrer Umgebung bereitstellen.