Zur Übersicht

Vom Suchen und Finden im Web – eine Einführung in Elasticsearch

Sabine Bär
Sabine Bär Aktualisiert am 17. Aug. 2020
MASSIVE ART 4 Dinge, die Web Entwickler über Elasticsearch wissen sollten

Wer suchet, der findet – im Idealfall. In Zeiten von rasant wachsenden, digitalen Datenmassen wird dieser Idealfall immer komplexer. Gleichzeitig drängt sich eine Frage in den Vordergrund: Wie soll ich in den Informationsfluten genau das finden, wonach ich suche?

Oder von der anderen Seite betrachtet: Wie kann ich einem Benutzer ein möglichst ideales Ergebnis bieten? Im Web ist dieses Thema besonders wichtig. Fast jede Webseite hat inzwischen eine – mehr oder weniger brauchbare – Suche. Die Techniken hinter diesen Suchen entwickeln sich stetig weiter.

Im ersten Teil meiner Blog-Reihe „Suchen und Finden mit Elasticsearch“ erhältst du einen umfassenden Einblick in das Thema. Es geht um die Begriffe Suchindex und Suchserver sowie um die Eigenschaften von Elasticsearch. Außerdem erfährst du etwas über den Aufbau als verteiltes System sowie dessen Verwaltung.

1. Das Kernstück jeder Suche: Der Suchindex

In der einfachsten Form der Suche wird die Suchabfrage direkt auf den Originaldaten ausgeführt, zum Beispiel auf Daten in einer Datenbank. Spätestens bei einer Volltextsuche stößt du hier aber an Grenzen – sowohl bei der Performance als auch bei Qualität und Priorisierung der Suchergebnisse.

Aus diesem Grund leg ich die für die Suche relevanten Daten meist zusätzlich in einem sogenannten Suchindex ab. Ein Eintrag – auch „Dokument“ genannt – enthält dann die für diese Suche aufbereiteten Daten und Metadaten sowie eine Referenz auf die Originaldaten. Unter einem Dokument kannst du dir zum Beispiel eine einzelne Inhaltseite auf einer Webseite vorstellen – oder ein Produkt in einem Webshop.

Die Qualität der Suchergebnisse verbesserst du maßgeblich durch speziell aufbereitete Daten – zum Beispiel wenn nach Wortteilen gesucht oder Tippfehler toleriert werden sollen.

Ein Suchindex ist aber auch auf Geschwindigkeit ausgelegt. Die Suche über zigtausende Einträge ist in Sekundenbruchteilen möglich. Ein sogenannter Suchserver verwaltet Suchindizes, nimmt dafür Daten entgegen und führt Abfragen auf diesen Daten aus.

2. Elasticsearch – flexibel und superschnell

Von den unzähligen Implementierungen, die es für Suchserver gibt, ist momentan besonders eine in aller Munde: Elasticsearch.

Elasticsearch basiert auf Apache LuceneTM, ist in Java entwickelt und Open Source (Apache 2 Open Source License). Außerdem ist es ein verteiltes System, das auf Nodes basiert. Ein Node ist eine Instanz von Elasticsearch – mehrere Nodes können zu einem Cluster zusammengefasst werden.

3. Ein verteiltes System: Nodes, Cluster, Replication und Sharding

Im einfachsten Fall gibt es einen einzelnen Node. Dieser nimmt sowohl die Anfragen entgegen und enthält auch die Daten. Mit wachsender Datenmenge macht eine komplexere Konfiguration Sinn mit mehreren Nodes Sinn. Diese übernehmen dann eventuell auch unterschiedliche Aufgaben – zum Beispiel sogenannte „arbiters“, die nur für das Bearbeiten von Anfragen zuständig sind. Durch Hinzufügen neuer Nodes kann das System jederzeit horizontal skaliert werden. Der Cluster verwaltet und verwendet die neuen Ressourcen automatisch.

Um auch mit großen Datenmengen umgehen zu können, ist ein Suchindex in mehrere Shards aufgeteilt – diese kannst du wiederum auf mehrere Nodes verteilen. Ein Eintrag im Suchindex wird vollständig in einem Shard abgelegt.

Replikas werden erzeugt, um eine hohe Verfügbarkeit zu gewährleisten. Im Normalfall gibt es einen Master-Node und einen oder mehrere Slaves. Die Shards, die zum Master-Node gehören, werden Primary Shards genannt. Wird ein Master-Node oder ein Primary Shard ungültig, wird sofort ein Slave als neuer Master/Primary verwendet. 

4. Verwaltung und Tools

Über eine REST-Schnittstelle kann der gesamte Suchserver verwaltet, Indizes erstellt oder Suchen abgesetzt werden – und vieles mehr.

Die Kommunikation erfolgt denkbar einfach über JSON. Angenommen Elasticsearch läuft lokal auf Port 9200, bekommst du zum Beispiel mit dem Aufruf http://localhost:9200/_cluster/state ein JSON mit dem aktuellen Status des Clusters zurück.

Wer lieber mit einer GUI arbeitet, kann das ElasticHQ-Plugin verwenden. Damit erhältst du eine Oberfläche mit Überblick über den Status des Clusters, der Nodes, Shards und Indizes. Die Indizes können angeschaut und durchsucht werden. Zusätzlich bietet das Plugin einen JSON-REST-Editor, der die Kommunikation via REST-API unterstützt.

Ausblick: Darauf freuen wir uns schon jetzt

Du hast dich mit den Möglichkeiten und Tools vertraut gemacht und dir eine geeignete Anzahl von Nodes, Shards und Replikas überlegt? Dann kannst du dich bereits jetzt auf Teil 2 meiner Blog-Reihe über Elasticsearch freuen: Die Definition des Mappings und die Auswahl von geeigneten Analyzern und Tokenizern.

(Bildquelle: Jason Ortego/unsplash.com)

Sabine Bär
Sabine Bär
Director of Development
Sabine ist Web Developerin bei MASSIVE ART. Wäldar ka nüd jedar sin, Web-Entwicklerin auch nicht. Sabine ist beides aus Leidenschaft. Die Frau mit Hang zu komplexen Coding-Projekten hat ihre Prozesse, Zahlen und die Dev-Jungs voll im Griff.