ElasticSearch ist derzeit ein sehr aktives Projekt unter der Apache-License-Version 2. Bereits zwei Wochen nach der Veröffentlichung der Version 0.7.1 steht mit Version 0.8 nun schon wieder ein weiteres Release an. Die Änderung im Vergleich zu 0.7.1 ist, dass mit Version 0.8 nun auch HDFS (Hadoop Distributed File System) aus dem Apache-Hadoop-Projekt als verteilter Speicher verwendet werden kann. Eine konsequente Weiterentwicklung.
Aufbau von ElasticSearch
Basis von ElasticSearch ist die Open-Source-Suchmaschine Apache Lucene. Für den Zugriff auf die Suchmaschine setzt ElasticSearch auf REST (ähnlich wie Apache Solr). Die Basis von ElasticSearch ist in Java implementiert. Als Build-System setzt ElasticSearch auf Gradle.
Die Indexierung wird mit JSON über HTTP durchgeführt. Über Module kann ElasticSearch erweitert werden. Mehrere Instanzen von ElasticSearch können ohne zusätzliche Konfiguration zu einem Cluster zusammengeschaltet werden.
Für den Betrieb in der Cloud stehen Module bereit, um den Index und auch die Metadaten des Clusters in der Cloud zu speichern, z. B. in Amazon S3.
Neben REST steht auch eine API für Java und Groovy zur Verfügung. Weitere Projekte bieten inzwischen auch Unterstützung für Perl, PHP, Python, Ruby und Erlang. Abbildung 1 stellt die schematische Architektur von ElasticSearch dar.
Installation und Start
ElasticSearch steht in drei Varianten zur Verfügung: als fertige Distribution, als Quellcodearchiv und als Quellcode aus Github. Für den schnellen Einstieg bietet sich die fertige Distribution an. Nach dem Download und Entpacken kann es mit dem ersten Test schon losgehen. Als Laufzeitumgebung benötigt ElasticSearch Java der Version 6. Über das Kommando elasticsearch im Verzeichnis bin wird eine Instanz von ElasticSearch gestartet. Unter Unix-Systemen startet dieses Kommando ElasticSearch im Hintergrund. Mittels -f wird explizit ElasticSearch im Vordergrund gestartet. Beim Start gibt ElasticSearch auch aus, unter welcher Adresse die HTTP-Schnittstelle zur Verfügung steht. Nachfolgend eine beispielhafte Ausgabe – in diesem Beispiel ist ElasticSearch über den Port 9200 erreichbar:
[10:49:11,362][INFO ][http ] [Rodstvow] bound_address[inet[/0.0.0.0:9200]], publish_address[inet[/n.nn.nnn.n:9200]]
Beim Start einer zweiten Instanz über elasticsearch -f erkennen sich beide Instanzen gegenseitig und gehen in den Clustermodus. Nachfolgend die beispielhafte Ausgabe der ersten Instanz:
[10:59:58,521][INFO ][cluster.service ] [Rodstvow] Added {[Venus Dee Milo][61bd28e5-3d37-4f30-94b6-32121b2c3cb9][inet[/nn.nn.nnn.n:9301]],}, Reason: zen-disco-receive(from node[[Venus Dee Milo][61bd28e5-3d37-4f30-94b6-32121b2c3cb9][inet[/nn.nn.nnn.n:9301]]])
Für die erste Bedienung bietet sich das Kommandozeilenwerkzeug curl an. Für einen ersten Eindruck in der Bedienung von ElasticSearch soll ein Datensatz angelegt und wieder abgefragt werden. Das nachfolgende Kommando legt einen Datensatz im Index books an. Die letzte Zeile ist die Rückgabe von ElasticSearch:
curl -XPUT localhost:9200/books/book/1 -d '> {> isbn : "0000-0001",> title: "the title",> author: "the author"> }'{"ok":true,"_index":"books","_type":"book","_id":"1"}
Dieser Datensatz kann nun einfach über die ID wieder abgefragt werden. Die Rückgabe ist im JSON-Format:
curl -XGET localhost:9200/books/book/1{"_index":"books","_type":"book","_id":"1", "_source" :{isbn : "0000-0001",title: "the title",author: "the author"}}
Eine Suche im vorhandenen Index gestaltet sich ähnlich. Nachfolgendes Beispiel zeigt eine Suche über das Feld isbn:
curl -XGET localhost:9200/books/book/_search?q=isbn:0000-0001{"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"hits":[{"_index":"books","_type":"book","_id":"1", "_source" :{isbn : "0000-0001",title: "the title",author: "the author"}}]}}
Eine vollständige Beschreibung der REST-API ist in der Dokumentation von ElasticSearch enthalten.
Schon ohne Wolke ein echter Hingucker
Die ersten Schritte mit ElasticSearch gehen sehr schnell von der Hand. Dies liegt auch an dem Videotutorial, das auf der Startseite von ElasticSearch angeboten wird. Schon ohne den Aspekt, dass der Index in der Wolke liegen kann, ist ElasticSearch ein sehr interessantes Projekt. Die Erweiterbarkeit über Module lässt hier noch einiges erwarten. Um eigene Module beizutragen, fehlt es derzeit noch etwas an Dokumentation. Der interessierte Entwickler muss hierbei auf den vorhandenen Quellcode der anderen Module zurückgreifen. Damit sollte die Modulentwicklung aber gelingen.
Das Projekt ist sehr schnell installiert, und wenn die Entwicklungsdokumentation noch ausgebaut wird, könnte sich ElasticSearch schnell zu einer interessanten Alternative für die Suche im eigenen Projekt mausern.
Links & Literatur
- http://www.elasticsearch.com
- http://www.apache.org/licenses/LICENSE-2.0.html
- http://it-republik.de/jaxenter/news/Suchmaschine-fuer-die-Cloud-ElasticSearch-055516.html
- http://hadoop.apache.org/hdfs/
- http://hadoop.apache.org/
- http://lucene.apache.org/
- http://lucene.apache.org/solr/
- http://aws.amazon.com/de/s3/
- http://github.com/clintongormley/ElasticSearch.pm
- http://hublog.hubmed.org/archives/001907.html
- http://github.com/rhec/pyelasticsearch
- http://github.com/adrpac/elasticsearch
- http://github.com/kungfooguru/erlastic_search
- http://www.elasticsearch.com/download
- http://www.elasticsearch.com/download/master/
- http://github.com/elasticsearch/elasticsearch
- http://curl.haxx.se/
- http://www.elasticsearch.com/docs/elasticsearch/




