Eine verteilte Open-Source-Such- und Analyse-Engine, die auf Apache Lucene basiert und für Echtzeit-Volltextsuche, Log-Analyse und Abfrage strukturierter Daten geeignet ist.
Archived. This article has not been updated since the publish date above. The dynamic nature of information means that previously accurate content can become outdated or even obsolete over time. Readers are advised to exercise due diligence and cross-check any information found in this blog post before making decisions or adopting any practices based on said information.
Spark Elasticsearch ist eine verteilte NoSQL-Datenbank zur Speicherung, Abfrage und Verwaltung dokumentenorientierter und halbstrukturierter Daten. Es handelt sich um eine als Open Source auf GitHub erhältliche RESTful-Suchmaschine, die auf Apache Lucene aufbaut und gemäß den Bedingungen der Apache-Lizenz veröffentlicht wurde.
Elasticsearch ist Java-basiert und daher für viele Plattformen verfügbar, die Dokumentdateien in verschiedenen Formaten durchsuchen und indizieren können. Die Daten werden in Elasticsearch als schemalose JSON-Dokumente gespeichert, ähnlich wie in NoSQL-Datenbanken.

Elasticsearch ist ein integraler Bestandteil einer umfassenden Reihe von Open-Source-Tools, die als Elastic Stack bezeichnet werden. Elasticsearch ist eine beliebte Volltextsuchmaschine, die ursprünglich von Mitgliedern des Google Brain Teams entworfen und entwickelt wurde. Elasticsearch wird in einer Reihe von kommerziellen Anwendungen – von Reddit über YouTube bis hin zu eBay – eingesetzt. Zahlreiche Unternehmen nutzen die textbasierte Suche inzwischen als wesentlichen Bestandteil ihrer Geschäftsprozesse. In dieser Hinsicht ähnelt Elasticsearch anderen Suchmaschinen.
Ein wesentlicher Unterschied zwischen Elasticsearch und anderen Suchmaschinen besteht jedoch darin, dass Elasticsearch auch verteilte Daten speichern und verwalten kann. Anders ausgedrückt: Elasticsearch wurde für Daten entwickelt, deren Größe ständig variiert. Auf diese Weise lassen sich auch hochkomplexe Abfragen durchführen, unabhängig davon, wie groß ein Datensatz ist. Wenn ein einziger Datenbankserver jedoch Daten von mehreren Benutzern verarbeiten muss, kann sich dies erheblich auf das System auswirken.
Tausende von Top-Unternehmen nutzen Elasticsearch sowohl für ihre Online- als auch für ihre Offline-Daten, darunter Tech-Giganten wie Google, Oracle, Microsoft und zahlreiche andere große Namen.
Aber man muss kein Tech-Gigant sein, um einen einfachen Weg zur Indexierung strukturierter Daten zu nutzen. Sie müssen nur wissen, dass Elasticsearch existiert und verstehen, wie es funktioniert.
Elasticsearch eignet sich für eine breite Palette von Anwendungsfällen wie z. B.:
Wenn Sie wissen möchten, wie Spark Elasticsearch funktioniert und in welchen Fällen Sie es verwenden können, müssen Sie zunächst die Infrastruktur hinter der Architektur von Elasticsearch verstehen. Hierzu zählen der Elasticsearch-Cluster, die Ports 9200 und 9300, Elasticsearch-Shards, Elasticsearch-Replikate, Analysefunktionen sowie Dokumente.
Ein Elasticsearch-Cluster ist eine Gruppe von miteinander verbundenen Compute-Knoten, die jeweils unterschiedliche Bestandteile von Clusterdaten speichern. Als Benutzer können Sie die Anzahl der Knoten, die jedem Cluster zugewiesen werden, anpassen, indem Sie die Datei „elasticsearch.yml“ im Ordner mit den Konfigurationen ändern. Zwar können beliebig viele Cluster ausgeführt werden, doch genügt den meisten Benutzern in der Regel ein Knoten, um die gewünschten Ergebnisse zu erzielen.
Bei einem Elasticsearch-Knoten handelt es sich um eine Computing-Ressource, die speziell auf die Suche, Indexierung und Skalierung der Datenbank abgestimmt ist. Als verteilte Datenbank arbeitet Elasticsearch mit einer Single Source of Truth, dem Elasticsearch-Datenknoten, der Ihre gesamten Daten beinhaltet. Für jeden Knoten eines Clusters wird ein eigener Name verwendet. Typischerweise enthält der Index eines Elasticsearch-Knotens etwa 10 bis 50 Millionen Dokumente.
Auf einem Elasticsearch-Shard finden Sie zwei verschiedene Porttypen. Der erste der beiden Shard-Ports ist immer geöffnet, während der zweite Shard-Port nur geöffnet wird, wenn ein Elasticsearch-Index erstellt und ein Cluster initialisiert wird. Port 9200 ist der Standardport für den primären Shard; 9300 der Standardport für dessen Replikat.
Elasticsearch-Shards sind eine reine Sammlung von Kibana-Indizes innerhalb eines Indexes. Elasticsearch verfügt über zwei verschiedene Indextypen: Elasticsearch-Dokumente (doc) und Elasticsearch-Indizes. Dokumente werden mittels Kennungen und Indizes mit einem eindeutigen Namen verknüpft.
Ein Replikat ist eine Kopie eines Shards, wobei alle Änderungen auf dem sekundären Replikat übernommen werden, aber für den Client transparent bleiben. Das primäre Replikat wird automatisch aktualisiert, wenn neue Daten hinzugefügt bzw. gelöscht, aktualisiert oder geändert werden.
Eine Analysefunktion ist ein Bestandteil eines Elasticsearch-Clusters. Sie ruft Daten aus der Datenbank ab und analysiert diese. Auf diese Weise können Daten, die an den Benutzer übermittelt wurden, gefiltert und sortiert werden.
Elasticsearch-Dokumente sind der primäre Indextyp in Elasticsearch. Jedes Dokument wird als ID im Datensatz angelegt und verfügt über eine einzelne Spalte pro Dokumenttyp. Ein einfaches Beispiel für eine Dokumenten-ID in Elasticsearch lautet {doc id}. Generell verfügt jedes Dokument in einem Elasticsearch-Cluster über eine Shard-ID, einen Namen und ein Array mit Indizes, wobei alle Felder ihre eigenen Shard-übergreifenden Kennungen haben.
Kurz gesagt, Elasticsearch erfasst Daten und veröffentlicht diese auf jedem Knoten im Cluster. Anschließend werden die Daten entsprechend der aktuell gespeicherten Datenmenge nach oben oder unten skaliert. Elasticsearch bietet den Vorteil, dass Sie all Ihre Daten in einer zentralen Datenbank mit einem flexiblen Index-Container speichern können.
Als dokumentenorientierte RESTful-Suchmaschine bietet Elasticsearch eine Vielzahl nützlicher Tools und ist in der Lage, auch umfangreiche und unübersichtliche Datensätze zu verarbeiten. Darüber hinaus können Sie die Software auch ergänzend zu einem anderen Tool einsetzen. Zum Beispiel Elasticsearch + Spark.
Nehmen wir an, Sie möchten nach dem Begriff „Telekommunikation“ suchen. Hierfür genügt die folgende einfache Suchsyntax:
$"type:telecommunications"
Da Elasticsearch dokumentenorientiert ist, können Sie nicht einfach eine Liste von Dokumenten durchsuchen. Sie müssen einen „Dokumententyp“ abfragen. Wir verwenden die Wortfolge "type:telecommunications"
, um sicherzustellen, dass wir nur Dokumente erhalten, die den Suchkriterien entsprechen.Für diese Abfrage übertragen wir die ID-Nummer des Dokuments als Abfrageparameter:
$"type:telecommunications"
Um dies weiter zu testen, können Sie auch ein einfaches Beispieldokument erstellen, indem Sie die folgende Abfrage ausführen:
create index:type:telecommunications create partition:type:telecommunications --data-urlencode /tasks --data-urlencode tasks/
Das Tool Elasticsearch kombiniert die Lucene-Indexierung mit einem robusten verteilten Datenbankmodell. Auf diese Weise werden Datensätze in kleine Einheiten, sogenannte Shards, fragmentiert und auf verschiedene Knoten verteilt.
Die in Elasticsearch gespeicherten Daten liegen entweder im JSON-Format oder im CSV-Format vor. Jeder Index verfügt über ein eigenes Template für die im Index gespeicherten Dokumente. Der Index wird vollständig repliziert, wobei ein Message Bus zur Kommunikation mit der sekundären Replikation verwendet wird. Logdateien werden als Elasticsearch-Indizes erstellt.
Diese Dokumente werden als Array mit Key-Value-Paaren in einer Datenstruktur gespeichert, die als „Memcached Set“ bezeichnet wird. Ein Memcached Set ist eine schlanke, skalierbare Datenstruktur mit geringem Speicherbedarf, die in der Lage ist, Daten mit großem Speichervolumen zu speichern und zu verarbeiten.
Der Speicher von Elasticsearch wurde für die Aufnahme, Indexierung und Suche optimiert, wobei die Dateien in regelmäßigen Intervallen auf die Festplatte geschrieben werden. Die Größe des Indexes kann nur geändert werden, indem das zuletzt eingefügte Dokument gelöscht und durch ein neues ersetzt wird. Diese Aufgabe bezeichnet man als „Datenmigration“. Dabei wird ein neues Dokument aus dem neuen Index erstellt, aktualisiert und anschließend wieder eingefügt.