Elasticsearch ist eine Suchmaschine auf Basis von Lucene. Das in Java geschriebene Programm speichert Dokumente in einem NoSQL-Format (JSON). Die Kommunikation mit Klienten erfolgt über ein RESTful-Webinterface. Elasticsearch ist neben Solr der am weitesten verbreitete Suchserver. Er ermöglicht auf einfache Weise den Betrieb im Rechnerverbund zur Umsetzung von Hochverfügbarkeit und Lastverteilung.
Lizenzierung
Der Vertrieb durch das Unternehmen Elastic NV folgte dem „Open Core“-Model, das heißt, der Kern der Software unterlag Open-Source-Lizenzen (hauptsächlich Apache License 2.0), andere Teile standen unter der kommerziellen Elastic License.
Physischer Aufbau
Elasticsearch zerteilt jeden Index in mehrere Stücke, so genannte shards (Scherben, Bruchstücke). Die shards eines Indexes können vom Anwender bei Bedarf auf mehrere Server (nodes) aufgeteilt werden (die Gruppe heißt cluster), um die Rechenlast zu verteilen oder um Serverausfälle zu kompensieren. Läuft die Suchmaschine auf mehreren nodes, so wird einer als master node der Gruppe bestimmt.
Ein shard ist ein Lucene-Index. Elasticsearch nutzt Apache Lucene für die Indexierung und Suche als core library. Ein Elasticsearch-Index besteht also aus mehreren Lucene-Indizes. Ein Lucene-Index besteht aus einem Ordner mit Dateien, die einen invertierten Index beinhalten.
Funktionsweise
Dokumente, Typen und Indizes
Die kleinste Einheit, mit der gearbeitet wird, sind Dokumente (englisch documents). Jedes Dokument, das durchsucht werden soll, muss zuvor indiziert werden. Sollen beispielsweise Informationen zu Büchern durchsuchbar gemacht werden, könnten die Informationen über jedes einzelne Buch in jeweils ein Dokument geschrieben werden, welches anschließend indexiert werden muss. Ein Index entspricht dabei in etwa einer SQL-Tabelle, ein Dokument einer Zeile dieser Tabelle. Jedoch sind die Anzahl und Typen der Felder nicht notwendigerweise starr vorgegeben, können aber bei Bedarf durch eine Typzuweisung (englisch mapping) explizit typisiert werden. Um indiziert werden zu können, müssen die Dokumente im JSON-Format an Elasticsearch gesendet werden. Als JSON-Dokumente bestehen sie jeweils aus einem Satz an Paaren von Schlüsseln und Werten.
Kommunikation mit der REST-API
Sowohl für die Indexierung der JSON-Dateien als auch für Suchanfragen wird mit der REST-API von Elasticsearch kommuniziert. Es gibt verschiedene Möglichkeiten, diese Kommunikation durchzuführen. Die am weitesten verbreitete und am besten dokumentierte ist, Dokumente und Suchanfragen mit Verwendung des Programms cURL an die REST-API zu senden. Weiter bieten sich verschiedene Programme an (etwa Postman), die benutzerfreundlich zu dieser Art der Kommunikation fähig sind, aber auch die Kommunikation über selbst erstellte Skripte in den gängigen Programmiersprachen.
Indexierung
Schickt man ein Dokument zur Indexierung, startet Elasticsearch einen Analyseprozess (englisch analysis), während das Dokument für den Index aufbereitet wird. Dabei wird der zu indexierende Text des Dokuments umgewandelt, damit später die daraus gewonnenen Resultate in den Index geschrieben werden können. Zuerst wird der Text an definierten Stellen (wie Leerzeichen oder Kommas) in die einzelnen Wörter zerbrochen (etwa „Granatenstarke Suchmaschinentechnologie“ in „Granatenstarke“ und „Suchmaschinentechnologie“). Die Buchstaben jedes einzelnen dieser Wörter werden anschließend vollständig in Kleinbuchstaben umgewandelt (etwa „Granatenstarke“ in „granatenstarke“). Es folgen noch weitere Schritte; darüber hinaus ist es möglich, auch eigene Umwandlungsstufen einzubauen.
Zum einen speichert Elasticsearch die Resultate des Analyseprozesses (etwa „granatenstarke“) im Index ab, zum anderen werden auch die ursprünglich geschickten Originaldokumente an einem anderen Ort gespeichert.