Donnerstag, 24. Mai 2012


Artikel

Juni 2010 | Artikel

ElasticSearch - Verbindung von Lucene und Cloud

(Link zum Artikel: http://www.entwickler.de/jaxenter//003134)

Suchmaschine in der Wolke

Text: Markus Stäuble
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
NoSQL und Cloud Computing sind zwei Themen, die einiges in der IT derzeit in Bewegung setzen. Grundsätzlich können diese beiden Paradigmen unabhängig voneinander betrachtet werden. Es liegt aber nahe, Suchmaschinen auch mittels Cloud Computing zu betreiben. Mit ElasticSearch steht in Version 0.8 eine Open-Source-Variante für diese Kombination zur Verfügung. Dieser Bericht soll zeigen, was die Suchmaschine kann und wie diese funktioniert.

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:

  1. [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:

  1. [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:

  1. curl -XPUT localhost:9200/books/book/1 -d '
  2. > {
  3. > isbn : "0000-0001",
  4. > title: "the title",
  5. > author: "the author"
  6. > }'
  7. {"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:

  1. curl -XGET localhost:9200/books/book/1
  2. {"_index":"books","_type":"book","_id":"1", "_source" :
  3. {
  4. isbn : "0000-0001",
  5. title: "the title",
  6. author: "the author"
  7. }}

Eine Suche im vorhandenen Index gestaltet sich ähnlich. Nachfolgendes Beispiel zeigt eine Suche über das Feld isbn:

  1. curl -XGET localhost:9200/books/book/_search?q=isbn:0000-0001
  2. {"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"hits":[{"_index":"books","_type":"book","_id":"1", "_source" :
  3. {
  4. isbn : "0000-0001",
  5. title: "the title",
  6. author: "the author"
  7. }}]}}

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.

Markus Stäuble ist Senior IT-Consultant bei einer internationalen Werbeagentur. Darüber hinaus spricht er auf diversen Konferenzen und ist Autor von Fachartikeln und Büchern.
  1. http://www.elasticsearch.com
  2. http://www.apache.org/licenses/LICENSE-2.0.html
  3. http://it-republik.de/jaxenter/news/Suchmaschine-fuer-die-Cloud-ElasticSearch-055516.html
  4. http://hadoop.apache.org/hdfs/
  5. http://hadoop.apache.org/
  6. http://lucene.apache.org/
  7. http://lucene.apache.org/solr/
  8. http://aws.amazon.com/de/s3/
  9. http://github.com/clintongormley/ElasticSearch.pm
  10. http://hublog.hubmed.org/archives/001907.html
  11. http://github.com/rhec/pyelasticsearch
  12. http://github.com/adrpac/elasticsearch
  13. http://github.com/kungfooguru/erlastic_search
  14. http://www.elasticsearch.com/download
  15. http://www.elasticsearch.com/download/master/
  16. http://github.com/elasticsearch/elasticsearch
  17. http://curl.haxx.se/
  18. http://www.elasticsearch.com/docs/elasticsearch/

Kommentare