Elasticsearch Grundkurs

Dokumentenfelder durchsuchen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Suchfunktion von Elasticsearch erlaubt Ihnen, nach eigenen Kriterien und anhand eines bestimmten Scoring-Verfahrens, Dokumente und deren Felder in einem Index zu durchsuchen. Lassen Sie sich von Christopher Janietz erklären, wie Sie diese Suchfunktion optimal nutzen.

Transkript

Hauptaufgabe von Elasticsearch ist das Durchsuchen von Dokumenten. Von daher ist es naheliegend, sich mit der Suche von Elasticsearch und dessen Fähigkeiten auseinanderzusetzen. In diesem Video machen wir die ersten Anfänge mit Hilfe der Suche auf Feldern. Um etwas durchsuchen zu können, benötigen wir zunächst einmal natürlich Daten. Beispielsweise gibt es auf der Seite "imdb.com" eine Topliste aller bestbewerteten Filme aller Zeiten. Praktisch wäre es also nun, diese Daten nehmen zu können und in Elasticsearch zu speichern. Für diesen Zweck gibt es die sogenannte OMDB API. Diese erlaubt es mir, anhand der ID eines solchen Filmes über die API die Kerndaten eines jeden Filmes abzurufen. Dafür benötige ich lediglich die IMDB-ID. Diese finde ich, wenn ich beispielsweise auf den Film "Die Verurteilten" gehe und die Adresse kopiere. Hinter "Title" befindet sich die ID. Wenn ich nun auf "omdbapi.com" mit "i=" und den IMDB-Identifier suche, bekomme ich als JSON-Objekt die Informationen über diesen Film in englischer Sprache. Das Ganze mache ich mir nun zu Nutze, um die ersten fünf Filme ("Die Verurteilten", "Der Pate", "Der Pate 2", "The Dark Knight" und "Die zwölf Geschworenen") in meinem Elasticsearch zu schreiben. Dafür beginne ich zunächst einmal mit meinem Python-Notizbuch. Ich importiere die zwei relevanten Bibliotheken: "Requests" und "JSON". Vorsorglich habe ich schon einmal alle fünf IMDB-Identifier innerhalb dieser Liste hier hinterlegt. Außerdem definiere ich zusätzlich eine Variable "counter", mit der ich nun die IDs meiner Dokumente spezifizieren möchte. Für also nun jeden Film in dieser Liste erhöhe ich meinen Counter um eins und lade von der API den jeweiligen Film anhand seines Identifiers herunter. Der Identifier ist der jeweilige Eintrag in der Liste, der als Variable "movie" innerhalb dieses Lupus zur Verfügung steht. Ich nehme dies als JSON entgegen und ändere noch ein paar Daten der Variablen. Beispielsweise sorge ich dafür, dass das Attribut hier, also "jar" auch vom Typ "int" ist, dass die Anzahl der imdbVotes auch vom Typ "int" ist, als auch dass das imdbRating ein Float ist, beispielsweise 4,3. Nachdem ich also sicher gestellt habe, dass die Datentypen aller meiner Attribute so sind, wie ich es mir wünsche, schreibe ich diese jeweils unter der ID, also dem Counter in die Elasticsearch mit dem Aufruf "request.put". Nach jedem Speichervorgang lasse ich mir noch ausgeben, dass das jeweilige Dokument gespeichert worden ist. Um das Ganze zu testen, ob das auch korrekt funktioniert hat, rufe ich das erste Dokument ab und sehe nun hier den Film "The Shawshank Redemption", zu Deutsch auch "Die Verurteilten". Um nun eine Suche innerhalb meines Indexes durchzuführen, verwende ich die URL-Struktur des Indexes, des jeweiligen Typs und der Instruktion an der Score "search". Über URL-Parameter kann ich nun die Abfrage steuern. Diese URL-Parameter ist hier "q". Ich definiere für "q" also, dass ich nach dem Titel "Godfather" suchen möchte, was zu Deutsch "Der Pate" ist. Als Ergebnis bekomme ich nun die Information, dass alle fünf Shads erfolgreich abgefragt werden konnten. Außerdem bekomme ich innerhalb der Objektstruktur von "hits" die Informationen der Ergebnisse, beispielsweise das Dokument mit der ID 2 hat einen Score von 0,68 bekommen. Das bedeutet, dieses Dokument entspricht einem Wert von 0,68 nach dem internen Scoring-Verfahren von Elasticsearch meiner ursprünglichen Anfrage nach dem Titel "Godfather". Es handelt sich hier nun um den Film "The Godfather, also der erste Teil von "Der Pate". Außerdem sieht man hier, dass der Titel, nach dem ich gesucht habe, "Godfather", nicht der gleiche Titel ist, wie er in der Datenbank gespeichert wurde "The Godfather". Damit hat also Elasticsearch nach klassischen Datenbanksuchaspekten schon einen deutlichen Mehrwert geschaffen. Ich habe allerdings noch ein zweites Ergebnis mit der ID 3. Dies ist also der zweite Teil von "The Godfather Part 2". Interessanterweise hat dieses Dokument nun einen niedrigeren Scoring-Wert 0,28. Was daran liegt, dass meine Suchanfrage "Godfather" sich weniger vom Titel "The Godfather" unterscheidet als vom Titel "The Godfather, Part 2". Neben den beiden Ergebnissen zeigt mir Elasticsearch auch noch den besten Scoring-Wert innerhalb meiner Ergebnisse und die insgesamt gefundene Anzahl an Dokumenten. Sollte ich einen Time-Out spezifiziert haben, könnte es sein, dass dieser beispielsweise ausgelaufen ist und ich nur einen Teil der Ergebnisse erhalte, als auch die tatsächliche Suchzeit in Millisekunden. Natürlich sind es nicht die einzigen Möglichkeiten, die ich zur Suche habe. Beispielsweise kann ich auch nach mehreren Attributen gleichzeitig suchen wie beispielsweise dem Titel "Godfather", als auch dem Titel "Dark". Ich erhalte nun also, da es sich um eine Entweder-/ Oder-Abfrage handelt, sowohl das Ergebnis "The Godfather", als auch das Ergebnis "The Dark Knight", als auch das Ergebnis "The Godfather, Part 2". Dabei sind alle Dokumente wieder entsprechend ihrem Scoring-Wert angeordnet. Da nun "The Godfather" etwas mehr der ursprünglichen Suchanfrage "Godfather" ähnelt als "The Dark Knight" der Suchanfrage "Dark", ist der Scoring-Wert von "The Godfather" höher als der von "The Dark Knight". Statt Entweder/ Oder kann ich auch zwei Suchargumente spezifizieren mit einem "und". In diesem Fall sage ich also, ich möchte, dass im Titel "Godfather" steht als auch "2". Und korrekterweise erhalte ich dann nur einen Film als Ergebnis - "The Godfather, Part 2". Für relativ einfache Suchanfragen eignet sich diese Syntax über die URL. Sollte allerdings die Anfrage etwas komplizierter werden, so kann man auch JSON verwenden, um die Suche zu starten. Beispielsweise kann ich also nun in Form eines Dokumentes mit der Instruktion "query" starten. "query" beinhaltet nun also alle Informationen, mit der ich innerhalb meines Indexes suchen möchte. Ich suche nun also nach dem Titel "Dark". Dabei verwende ich einen sogenannten "match-query". Beim Ausführen bekomme ich also das erwartete Ergebnis "The Dark Knight", da "Dark" innerhalb des Title "The Dark Knight" steht. Wenn ich nun statt "match" "term" verwende und die Suche starte, so finde ich "The Dark Knight" nicht. Ändere ich die Anfrage von "Dark" auf "The Dark Knight", bekomme ich auch hier kein Ergebnis, da ein Term Query eine besondere Art der Indizierung eines Textfeldes voraussetzt. Selbstverständlich kann ich mit einem Match Query allerdings auch den kompletten Titel eines Filmes durchsuchen und bekomme hier einen sehr hohen Scoring-Wert, wenn der Titel genau dem Titel meines Filmes entspricht. Allerdings muss man bei einem Match Query immer aufpassen, denn jedes Wort wird einzeln ausgewertet. So hat ein Film wie "The Godfather, Part 2" und auch "The Shawshank Redemption" als auch "The Godfather" durchaus Relevanz für meine Suche, da das Wort "the", also "t-h-e" in allen dieser Filme im Titel enthalten ist. Um meinen Index löschen zu können, um beispielsweise neue Daten hinzufügen, verwende ich die Instruktion "DELETE" auf den Bezeichner des Indexes. Im Laufe dieses Videos haben wir nun also eine relativ einfache Suchanfrage auf einen Index erstellt. Dafür war es also nötig, den Index anzugeben, als auch den Typ. Und mit der Instruktion an der Score "search" haben wir die Suchaktion gestartet. Damit konnten wir entweder den Query als URL-Parameter übergeben, oder in Form eines JSON-Ausdrucks. Innerhalb des URL-Parameters können einfache Suchoperatoren wie OR oder AND und viele mehr verwendet werden. Außerdem haben wir noch kurz gesehen, dass Match Queries entsprechende Berücksichtigungen bei dem Liefern von Ergebnissen benötigen, und Term Query ist eine bestimmte Art von Index.

Elasticsearch Grundkurs

Lernen Sie, Elasticsearch und seine Einsatzgebiete zu verstehen und mit der API zu interagieren.

2 Std. 19 min (23 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:23.02.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!