Elasticsearch Grundkurs

Dokumente erstellen, ändern und abrufen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Mit Hilfe der HTTP-API können Interaktionen wie das Speichern, Abrufen, Ändern und Löschen von Dokumenten in einem Elasticsearch-Index vorgenommen werden. Erfahren Sie in diesem Video alles, was Sie über den Umgang mit Dokumenten wissen müssen.

Transkript

Die häufigsten Aktionen auf einer Datenbank sind so genannte CRUD-Aktionen. Dies steht für CREATE, READ, UPDATE und DELETE. Auch eine Datenbank wie Elasticsearch muss über diese Fähigkeiten verfügen. Im Laufe dieses Videos lernen wir die dafür nötigen HTTP-Aktionen kennen, als auch die Struktur, in der Daten auf Elasticsearch abgebildet werden. Dafür beginne ich nun zunächst mit meinem Notizbuch. Für den Verlauf dieses Videos benötige ich zwei Bibliotheken: "Requests", um mit Elasticsearch zu reden, als auch "JSON", um Objekte aus Python in die gewünschte Form für Elasticsearch zu bringen. Ich beginne nun also damit, dass ich diese Bibliotheken importiere und das Kommando ausführe. Als Nächstes definiere ich mein Dokument, das in Elasticsearch gespeichert werden soll, in diesem Fall also nun dieses Objekt hier. Dieses Objekt hat nun diverse Attribute, wie beispielsweise einen Titel, ein Jahr, eine Bewertung, als auch eine Anzahl von Stimmen, die für die Bewertung abgegeben worden sind. Es handelt sich nun also um die Beschreibung eines Films. Und genau dieses Objekt wird nun in Form von JSON allerdings als Text String dank der Funktion "dumps" in der Variable "Dokument" gespeichert. Das bedeutet, ich sende nun ein JSON-Objekt an Elasticsearch. Um ein Dokument in Elasticsearch zu hinterlegen, bedient man sich des HTTP-Aufrufes "PUT". Daher verwende ich auf der Bibliothek "Requests" die Instruktion "PUT". Daraufhin definiere ich nun den Endpunkt der Elasticsearch API und dort gebe ich nun einen sogenannten Index an. "movies" ist also die Bezeichnung eines Index. Ein solcher Index kann also nun der Datentopf für jegliche meiner Dokumente sein. Idealerweise passt der Name des Index zum Inhalt der Daten. Auf dem nächsten Punkt ist der sogenannte Typ definiert, also der Typ meines Dokumentes. Innerhalb eines Index kann also nun mehr als ein Typ existieren. Ich speichere nun speziell ein Dokument vom Typ "movie" innerhalb eines Index mit der Bezeichnung "movies". Und zu guter Letzt definiere ich noch einen Identifier, in dem Fall mit dem Bezeichner "number 1". Dies ist also die Dokumenten-ID von meinem Film. Als Datenattribut sende ich nun das Dokument mit dieser HTTP-Anfrage mit und speichere es damit innerhalb meiner Elasticsearch-Instanz. Innerhalb der Antwort von Elasticsearch bekomme ich nun einige Information dazu, ob meine Aktion erfolgreich war. Zunächst einmal wurde also meine geforderte ID Verwendet. Außerdem ist mein Dokument also im Index "movies" gelandet, als auch vom Typ "movie" wie in der URL spezifiziert. In Elasticsearch ist ein Index üblicherweise in sogenannte "shards" geteilt. Diese dienen der Performance-Optimierung und der Verteilung der Daten, so dass nicht alle Daten eines Indexes sich auf demselben Server beispielsweise befinden, und mit Hilfe von "shards" wird dies möglich gemacht. Mein Dokument würde nun also innerhalb von zwei Shards erfolgreich gespeichert. Mit der Version erlaubt mir Elasticsearch zu sehen, ob ein Dokument im Laufe seiner Zeit verändert wurde. Sollte ich also noch einmal ein Dokument auf diese ID speichern, so wird die Version inkrementiert, in diesem Fall also dann auf Version N 2. Innerhalb des created Attributs sehe ich, ob meine Dokument auch tatsächlich erstellt wurde. Ich kann das Ganze nun noch einmal ausführen mit Strg+Enter-Taste und sehe nun, dass wiederum das Dokument nicht neu erstellt worden ist, sondern lediglich das Dokument auf Version 2 aktualisiert wurde, da es sich hierbei um ein Update handelt. Mein Dokument kann ich nach dem Speichern innerhalb von Elasticseach über dieselbe URL-Struktur lediglich mit dem HTTP-GET-Aufruf wieder abrufen. Beim Abruf bekomme ich neben dem Dokument, das sich auf an der Score "source" befindet, zusätzliche Informationen, wie den Index und ID, als auch die vergebene Versionsnummer, und ob das Dokument gefunden wurde. Elasticsearch ist allerdings keine elastische NoSQL-Datenbank wie viele andere. Basierend auf dem von mir gespeicherten Dokument hat Elasticsearch automatisch ein Schema eingelegt, das beispielsweise nun besagt, dass das "imdbRating" immer vom Typ "Float" sein muss oder auch die "imdbVotes" - vom Typ "Integer" oder "Long" und damit also immer nummerisch. Wie vorher gesehen kann ich mein Dokument einfach überschreiben und damit eine neue Version erstellen. Zusätzlich bietet mir Elasticsearch allerdings auch die Möglichkeit, nur bestimmte Attribute neu zu setzen oder zu verändern. Ich definiere hier nun also ein Dokument, in dem die Struktur zunächst einmal die Angabe "doc" enthält, das heißt, ein Objekt mit dem Attribut "doc", wo ich nun meine neuen oder geänderten Attribute definiere, um diese als Update in der Datenbank zu speichern. Ich füge nun also das Attribut "myRating" hinzu mit dem Wert "4.3". Zusätzlich kann ich innerhalb des Hauptobjektes die Instruktion angeben. Dass sollte mein Dokument noch nicht existieren, dieses erstellt werden soll mit der Information "upsert", was so viel bedeutet wie Update oder Insert. Vom Aufruf ändert sich das Ganze nun auf einen sogenannten Post. Dieser wird also immer dann verwendet, wenn ich tatsächlich Änderungen vornehmen möchte und nichts neu erstelle. Außerdem wird nun unterhalb der ID die Instruktion an der Score "update" eingegeben. Mein Dokument übergebe ich wie üblich als JSON im Dataattribut. Ähnlich wie vorher bekomme ich die Information, dass mein Dokument upgedatet wurde und dass die Version nun Version 3 ist. Ein erneuter Aufruf zeigt mir nun, dass mein Attribut "myRating" hinzugefügt worden ist. Ähnlich wie beim ersten Hinzufügen ist dem Schema von Elasticsearch hinterlegt, dass alle Attribute vom Typ "myRating" immer ein Float-Datentyp sind zukünftig. Unter Umständen möchte ich aber auch Änderungen basierend auf den bereits existierten Inhalten durchführen. Dies kann ich mit Hilfe eines Scriptes. Nun benutze ich also ein Update-Dokument, bei dem ich nicht "doc" definiere, sondern "script". Hier definiere ich mein Script nun also inline, das heißt, innerhalb meines jetzigen Aufrufes. Unter dem "ctx"-Objekt, was so wie heißt wie Kontext, kann ich nun auf Attribute zurückgreifen, wie sie sich auf meinem Dokument befinden, in dem Fall also nun das Source-Attribut. Hier ändere ich nun also das von mir hinzugefügte Attribut "avgRating", indem ich das bereits existierende "imdbRating, als auch mein eigenes Rating addiere durch zwei Teile und damit also nun im Durchschnitt beide Bewertungen als "avgRating" speichere. Mit der Angabe von "paintless" definiere ich die elasticsearch-eigene kleine Script-Sprache. Nach einem Aufruf bekomme ich wieder die Information, dass mein Dokument upgedatet wurde. Gehe ich nun also noch einmal zum Aufruf zurück, sehe ich, dass das avgRating nun 6.0 ist. Um ein Dokument zu löschen, benutze ich einen ähnlichen Aufruf wie beim Abrufen eines Dokumentes. Lediglich ändere ich die HTTP-Instruktion auf "DELETE" Nach einem solchen DELETE kann ich also nun das Dokument mit der ID Number 1 nicht mehr aufrufen. Das durch mich eingelegte Schema bleibt allerdings bestehen, da ich an dieser Stelle nicht den Index entfernt habe. Zusammenfassend lässt sich also sagen, dass ich über HTTP-Aktionen die CRUD-Operationen auf Elasticsearch steuern kann. Ich habe mit Hilfe des PUTs ein Dokument erstellt. Das Dokument konnte ich dann abrufen mit Hilfe des HTTP GET Aufrufes. Aktualisieren kann man ein Dokument mit Hilfe eines POSTs, gegebenfalls wie auch gesehen mit einem Script. Ein Dokument konnte ich mit DELETE löschen. Von der Struktur her haben wir also gesehen, dass es einen sogenannten Index gibt. Dieser ist der Datenspeicher, in unserem Beispiel "movies". Der Dokumententyp wird unterhalb des Indexes spezifiziert. In meinem Fall war der Dokumententyp nun also "movie". Und der Identifier identifiziert also ein einziges Dokument innerhalb eines solchen Indexes. Er ist also innerhalb dieses Index einzigartig und wird also unterhalb des Typs spezifiziert.

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!