Elasticsearch Grundkurs

Das Suchverhalten mit Feldtypen steuern

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Mit dem Einsatz verschiedener Feldtypen können Sie für korrektes Suchverhalten mit Elasticsearch sorgen. Vor dem Speichern von Dokumenten sollten Sie daher daran denken, die passenden Feldtypen zuzuweisen.

Transkript

Auch wenn man meinen könnte, dass in NoSQL ähnlichen Datenbanken, wie Elasticsearch, Datentypen keine Rolle spielen, so erzeugt Elasticsearch im Hintergrund trotzdem, für die Dokumente, die in einem Index sich befinden, ein Schema, basierend auf den dort zuerst festgestellten oder vorher spezifizierten Datentypen. In diesem Video setzen wir uns damit auseinander, wie wir diese Datentypen vorab spezifizieren und zusätzlich auch das Index-Verhalten von Elasticsearch beeinflussen können. Ich beginne also mit meinem Notizbuch. Importiere die Bibliotheken "Requests" und "JSON" und definiere nun meinen Index "Movies" im Vorhinein. Hierfür verwende ich sogenannte Mappings. Um das Schema meines Index beziehungsweise meines Types auf dem Index im Vorhinein festzulegen. Ich definiere also für den Typ "Movie" die folgenden Properties. Ich lege fest, dass das Feld "Year" vom Typ "integer" ist, aber nicht indiziert werden soll. Das bedeutet, dass "Year" wird zwar innerhalb meiner Datenbank, in dem Source-Dokument gespeichert, allerdings wird es keinen Index geben, um auf Basis von "Year" suchen zu können. Da nicht unbedingt jedes Feld in einem Dokument relevant ist für eine Suche, kann es durchaus nützlich sein, um die Performance der Datenbank optimal zu halten. Außerdem lege ich fest, dass das IMDb-Rating vom Typ "float" sein soll. Ich speichere das Ganze nun auf meinem Index mit dem "put"-Befehl. Damit wird auch automatisch, sollte mein Index nicht existieren, dieser angelegt werden. Als nächstes speichere ich nun fünf Dokumente, die diese Information beinhalten, auf meinem Index ab. Sollte ich nun, obwohl anders vorher festgelegt, auf Basis des Jahres meines Films, suchen wollen, beispielsweise nach allen Filmen des Jahres 2008, so werde ich eine Fehlermeldung erhalten, in der ich von Elasticsearch auch noch einmal explizit darauf hingewiesen werde, dass das Feld Jahr oder auch "Year", nicht indiziert ist. Suche ich hingegen nach dem IMDb-Rating, das größer ist als 9,1, finde ich beispielsweise den Film "The Godfather". Und obwohl das Erscheinungsjahr nicht indiziert ist, befindet sich der Inhalt trotzdem in meinem Dokument "Source". Hierbei sollte auch noch mal der Unterschied klar werden, zwischen indizierten Feldern, die speziell für die Suche abgelegt werden, als auch dem Dokument selbst, das separiert noch einmal gespeichert wird. Bei der Suche nach dem Wort "Dark" von "The Dark Night", finde ich wie üblich den Film nur anhand des einzigen Wortes "Dark". Ich kann nun zusätzlich auch im Nachhinein, weitere Mappings für meinen Typ auf dem Index festlegen. Dabei gebe ich nun nicht mehr innerhalb meines Objektes die Instruktion "mappings" an, sondern verwende den Endpunkt "_mappings/movie". Wichtig ist, dass der Typ innerhalb der URL, als auch innerhalb des Dokumentes übereinstimmen. Ich spezifiziere nun hier ein zusätzliches Feld, mit dem Titel "SpecialTitle". Dieses ist vom Typ "string" und soll nicht analysiert werden, das bedeutet, es wird nicht in die jeweiligen Tokens zerlegt. Außerdem sage ich nun für das Feld "Title", dass bei jeder Neuindizierung, beginnend ab dem Speichern dieses Mappings, der Inhalt von "Title" in "SpecialTitle" kopiert werden soll. Dieser Usecase ist äußert üblich, wenn man beispielsweise verschiedene Arten von Beschreibungen eines Produktes hat und diese in eine große Beschreibung zusammenfassen möchte, um sie durchsuchbar zu machen. Ich könnte nun also mehr als nur das Feld "Title" in das Feld "SpecialTitle" kopieren. Und für den "SpecialTitle" beispielsweise einen besonderen Analyzer verwenden. Als nächstes müsste ich nur noch einmal alle meine Dokumente reindizieren. Dadurch, dass das Mapping sich geändert hat, wird dies nicht unmittelbar für alle bereits bestehenden Dokumente angewendet. Daher speichere ich alle Dokumente noch einmal neu in meinem Index und suche dann auf dem "SpecialTitle", nach dem Wort "Dark". Da es sich bei "SpecialTitle" um ein nicht analysiertes Feld handelt, kann ich nicht nach einzelnen Tokens wie "Dark" suchen. Ich muss nach dem gesamten Ausdruck suchen, wie beispielsweise "The Dark Night". Suche ich also nach dem gesamten Begriff, finde ich auch den von mir gesuchten Film. Elasticsearch bietet mir den Luxus, dass ich nicht für jedes Feld explizit angeben muss, welchen Datentyp ich mir da wünsche. Denn beim ersten Speichern eines Feldes, das vorher noch nicht existiert hat, wird automatisch der Datentyp bestimmt. Eine Übersicht über die existenten Datentypen und Konfigurationen, finde ich auf dem Endpunkt "_mappings", für den jeweiligen Typ. Hier also für "Movie". Automatisch wurden für Felder wie "Country", Feldspezifikationen vom Typ "text" angelegt. Auch besondere Konfigurationen wie "copy-to", kann ich hier einsehen. Elasticsearch erlaubt es mir nun also, eigene Datentypen zu spezifizieren. Dabei stehen mir gängige Datentypen wie "string", "text", "float", "intiger", "date" und so weiter zur Verfügung. Für Datentypen wie beispielsweise "date", kann ich auch hier spezielle Konfigurationen vornehmen, um Datumsformate richtig einzulesen. Neben dem Spezifizieren des Datentyps selbst, kann ich noch das Indexverhalten steuern, indem ich festlege, ob ein Index überhaupt für einen Feld erzeugt werden soll oder nicht. Denn Felder, nach denen ich üblicherweise nicht suche, sollten nicht extra initiiert werden, da das Ganze nur an der Performance meiner Datenbank nagt. Außerdem haben wir die "copy_to-Operation" gesehen, die häufig verwendet wird, um multiple Felder mit bestimmten Textinhalten in einem anderen Feld zusammenzufassen. Mithilfe des "_mappings-Endpunkt", konnten wir noch einmal die von Elasticsearch automatisch vorgenommene Konfiguration, als auch unsere eigene einsehen.

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!