Erste Schritte mit Elasticsearch

12.06.2014 09:30

Erste Schritte mit Elasticsearch

Elasticsearch ist ein in Java implementierter, skalierbarer Document-Store, der per HTTP-API und JSON befüllt und durchsucht werden kann. In diesem kurzen Artikel sehen wir, wie Dokumente in Elasticsearch indiziert werden und wie einfach auf den indizierten Dokumenten gesucht werden kann.

Installation
Um Elasticsearch zu starten benötigt man lediglich eine aktuelle Java Virtual Machine und kann sofort loslegen. Das Archiv kann einfach heruntergeladen werden, entpackt und gestartet werden (die folgenden Beispiele gehen von einer Linux-Umgebung aus, Elasticsearch läuft allerdings auch unter Windows).

Eine einfachere Installation ist kaum denkbar. Dass Elasticsearch auch wirklich läuft, können wir sehen, wenn wir per Browser die URL http://localhost:9200 aufrufen.

es-startup

Dokumente indizieren
Elasticsearch arbeitet sowohl intern als auch über die API mit JSON-Dokumenten. Direkt nach dem Start können neue Dokumente hinzugefügt werden. Da die Felder der Dokumente intern in einen invertierten Index gespeichert werden, der gut durchsuchbar ist, spricht man beim Hinzufügen von Dokumenten auch vom Indizieren.

Die Struktur eines Dokumentes spielt für Elasticsearch im ersten Zuge keine große Rolle. Es können sowohl primitive Datentypen als auch komplexe, eingebettete JSON-Objekte gespeichert werden. Im folgenden indizieren wir eine Vortragsbeschreibung für die Developer-Week mit dem Http-Client <a href="http://curl.haxx.se/">curl</a>.

curl -XPOST 'http://localhost:9200/developerweek/talk/' -d '{
 "speaker" : "Florian Hopf",
 "date" : "2014-07-14T15:30:00",
 "title" : "Anwendungsfälle für Elasticsearch"
}'
 

Das JSON-Dokument, das im Body des Http-Requests verschickt wird, enthält einen Titel, einen Sprecher und ein Datum. In der Url sind zwei weitere wichtige Informationen enthalten: Das erste Pfadsegment nach dem Port 9200 enthält den Namen des Index, in diesem Fall developerweek, und das zweite Segment enthält den Typ des indizierten Dokuments, hier talk. Der Index ist eine logische Sammlung an Daten, die auch über mehrere Elasticsearch-Knoten verteilt werden können. Der Typ bestimmt anhand des sogenannten Mappings, wie ein Dokument im Index abgelegt wird. Für eine komplexere Anwendung müssen hier noch vorab weitere Informationen hinterlegt werden, wir verwenden in diesem Beispiel jedoch das Mapping, das aus den Typen unseres Dokuments erkannt wird. Weder Index noch Typ müssen vor dem ersten Indizieren existieren und werden automatisch angelegt.

Dokumente auslesen
Wenn Elasticsearch das Dokument indiziert hat erhalten wir eine generierte Id als Antwort. Diese Id kann auch direkt verwendet werden, um das Dokument auszulesen. Bei einem Aufruf von http://localhost:9200/developerweek/talk/{URL]?pretty=true antwortet Elasticsearch mit einem weiteren JSON-Dokument, das unseren indizierten Vortrag enthält.

es-get

Da Elasticsearch schon die Suche im Namen trägt kann man aber natürlich noch auf anderen Wegen auf die Dokumente zugreifen: Alle Felder eines Dokuments sind je nach hinterlegtem Mapping durchsuchbar, seien es Text, Zahlen, ein Datum oder sogar Geoinformationen. Im einfachsten Fall können wir einfach den _search-Endpunkt aufrufen und den Suchbegriff als Parameter angeben, beispielsweise http://localhost:9200/developerweek/talk/_search?pretty=true&q=elasticsearch.

es-search

Wie wir sehen wird auch hier unser Dokument zurückgeliefert. Über die <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html">Query-DSL</a>, eine JSON-API, können noch deutlich komplexere Abfragen gestellt werden. Unterschiedliche Abfragearten auf unterschiedlichen Feldern oder zusätzliche Informationen wie die populäre Facettierung, eine dynamische Kategorisierung der Suchergebnisse, können einfach genutzt werden. Für den Zugriff auf Elasticsearch aus unterschiedlichen Programmiersprachen stehen diverse Clients zur Verfügung.

Mehr
In diesem kurzen Artikel kann natürlich nur an der Oberfläche von Elasticsearch gekratzt werden. Wer sich für weitere Details zu Elasticsearch und für Anwendungsfälle dafür interessiert sollte deshalb am Dienstag den 14.07. um 15:30 zu Anwendungsfälle für Elasticsearch kommen, um mehr zu erfahren. Wer schon vorab mit Elasticsearch experimentieren will kann sich auch eines der vielen Plugins installieren, die die Arbeit mit Elasticsearch erleichtern können.

Schlagwörter: Java , Daten


Autor Florian Hopf

Florian Hopf arbeitet als freiberuflicher Softwareentwickler mit den Schwerpunkten Information Retrieval und Content Management in Karlsruhe. Er setzt Elasticsearch, Lucene und Solr in unterschiedlichen Projekten ein und ist einer der Organisatoren der Java User Group Karlsruhe.

Florian Hopf

Developer Week in Social Media

Folgen Sie uns auf:

Aussteller & Sponsoren

Infos anfordern

Infos anfordern
  • Florian Bender
  • Projektleitung
  • Tel.: +49 (89) 74117-206
  • Fax: +49 (89) 74117-448
  • E-Mail: florian.bender@nmg.de

Medienpartner