Mit Elasticsearch zur individuellen Enterprise Search, Teil 1

Täglich 4.5 Milliarden „Likes“, über eine Milliarde Logins, 1.65 Milliarden aktive Nutzer - das sind Zahlen, die für das Unternehmen Facebook stehen und die man auch bei Facebooks Omnipräsenz erahnen kann. Aber wer weiß schon, dass täglich ca. 13.000 Facebook Mitarbeiter mehr als 60 Millionen Suchanfragen für ihre interne Arbeit absetzen? Dies erfordert eine Umgebung, die extrem kurze Antwortzeiten bei Suchanfragen in großen Datenmengen sicherstellt.

Um genau diese technische Hürde zu nehmen, setzt Facebook seit drei Jahren auf die Software Elasticsearch für viele interne Tools und die Enterprise Search. Doch nicht nur Facebook vertraut auf Elasticsearch, die Liste der namhaften Kunden ist lang:  Audi, Otto, SwissLife, Cern, Netflix und viele mehr nutzen das Open Source Tool. 

Doch wieso gerade Elasticsearch? Was macht das Hauptprodukt dieses sehr jungen Unternehmens so attraktiv und warum sollte mich das interessieren? 

Das Unternehmen Elastic (bis Anfang 2015 Elasticsearch) gibt es erst seit 2012. Mit inzwischen mehr als 250 Mitarbeitern und einer bisherigen Finanzierung von ca. 104 Millionen US Dollar bietet Elastic inzwischen zehn verschiedene Produkte an. Alle diese Produkte erweitern kontinuierlich den Kosmos rund um Elasticsearch.

Elasticsearch ist eine vielfältig einsetzbare Indizierungs- und Suchsoftware. Das einfache Aufsetzen, die inzwischen große Community und eine frei zugängliche Open-Source-Version hat Elasticsearch so beliebt gemacht. Vielfältig einsetzbar ist Elasticsearch aufgrund der Verwendung von Standard-Technologien, dem Plugin Kosmos und den relativ einfachen Schnittstellen.

Inzwischen gibt es unendlich viele Tutorials, Foreneinträge und Beschreibungen für die Konfiguration und den Einsatz von Elasticsearch. Leider sind viele aufgrund der schnellen und kontinuierlichen Weiterentwicklung mit einhergehenden Inkompatibilitäten inzwischen veraltet und damit überwiegend unbrauchbar geworden. Deshalb wollen wir in unserem neuen Tech-Blog in einer Serie Schritt für Schritt mit Beispielen und Sourcecode beschreiben, wie man mit Elasticsearch und relativ wenig Aufwand eine eigene maßgeschneiderte Enterprise Search aufbauen kann.

Die Blog-Serie

Es gibt eine ganze Blog-Reihe zum Thema Elasticsearch, deren einzelne Themen zum Teil aufeinander aufbauen. Bereits beschriebene Themen, die auch eine Voraussetzung für die Umsetzung der nachfolgenden Beispiele sind, sind über die Links erreichbar.

Folgende Themen sind in der Serie behandelt oder geplant:


Einrichten einer Elasticsearch-Instanz

Das Einrichten einer Elasticsearch-Instanz gestaltet sich inzwischen relativ einfach. Details zur Installation sind auch der Dokumentation (https://www.elastic.co/guide/index.html) zu entnehmen. Man kann diese auf einen physikalischen Rechner oder eine virtuelle Maschine installieren. Wichtig ist, dass man ca. 2GB freien Arbeitsspeicher zur Verfügung hat. Elasticsearch ist dafür kompiliert und konfiguriert in einer Windows- oder Linux-Umgebung betrieben zu werden. Für beide Versionen sind Skripte zum Service-Betrieb mittlerweile Bestandteil des Installationsarchivs. 

  • Zunächst muss man die richtige Elasticsearch Installation von folgender Quelle herunterladen: www.elastic.co/downloads/elasticsearch
  • Damit Elasticsearch gestartet werden kann, muss die entsprechende JVM auf dem System installiert sein und die Umgebungsvariabel JAVA_HOME auf das JVM-Installationsverzeichnis verweisen.
  • Der Server kann nach dem Entpacken der Installationsdatei durch einen einfachen Commandline-Aufruf gestartet werden. Innerhalb des CMD-Fensters sollte man in den entpackten Ordner wechseln und folgenden Aufruf tätigen:
bin\elasticsearch.bat

INFO

  • Standardmäßig wird Elasticsearch dem Cluster den Namen „Elasticsearch“ und dem Clusterknoten bei jedem Start einen neuen Namen zuweisen. Dieser kann jedoch auch im Verzeichnis config in der Datei elasticsearch.yml manuell festgelegt werden. Hier können auch andere Einstellungen vorgenommen werden.
    • Möchte ich z. B. den Clusternamen „myCluster“und den Clusternodename „myNode“ vergeben, dann sind die folgenden Einstellungen in der elasticsearch.yml zu machen:
# ------------------- Cluster -----------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: myCluster
#
# ------------------- Node --------------------------
#
# Use a descriptive name for the node:
#
node.name: myNode
#
 
  • Als Standardport wird für die REST-Schnittstelle der Port 9200 und für das proprietäre Binärprotokoll 9300 verwendet.
  • Als Minimum für die JVM wird 256 MB und als Maximum 1GB festgelegt. Dieser Faktor kann in der Datei bin\elasticsearch.in.bat angepasst werden. Allgemein gilt, dass man den Speicher auf dem System mindestens ein weiteres Mal so wie für die JVM festlegen sollte. So können die unterliegenden Lucene Indizes optimal funktionieren.
  • Besondere Speichereinstellungen der JVM und des Betriebssystems sind bei Installationen, die sehr viel Hauptspeicher nutzen sollen, notwendig und wir empfehlen im Kontext dieses Tutorials die Standardwerte beizubehalten.
  • Es ist auch möglich, Elasticsearch als Service auf einem Server laufen zu lassen. Hierzu sind jedoch Betriebssystem spezifische Maßnahmen notwendig, die wir ggf. in einem späteren Blogeintrag erklären werden.
  • Mit den Standardeinstellungen ist der Elasticsearch Server aus Sicherheitsgründen nur lokal erreichbar. Um dies zu ändern kann eine Einstellung in der Datei elasticsearch.yml vorgenommen werden. In dieser Blogserie werden wir jedoch nur Kibana, welches wir als Such GUI verwenden werden, so konfigurieren, dass es innerhalb des Netzwerks erreichbar ist.
  • Um zu testen ob die Elasticsearch-Instanz erfolgreich gestartet wurde, kann man folgenden String in einen auf demselben Rechner installierten Browser eingeben: ht­tp://localhost:9200/
    Als Antwort sollte folgender Inhalt zurückgeliefert werden:
{
"name" : "RANDOM_NAME",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.3.3",
"build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",
"build_timestamp" : "2016-05-17T15:40:04Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}

Mit diesen wenigen einfachen Schritten haben wir nun eine laufende Elasticsearch-Instanz. Im folgenden Blogeintrag beschreiben wir, wie man Kibana einrichtet und einen ersten Index aufsetzt.

dr_marc_offmannDr. Marc Offman - war Projektleiter bei der iteratec GmbH in München. Seit 2013 beschäftigte er sich innerhalb unterschiedlichster Projekte mit Elasticsearch, u.a. mit dem Aufbau einer maßgeschneiderten Enterprise Search. Wir schätzen seinen Beitrag und informieren, dass er nicht mehr bei iteratec tätig ist.

Tags: Individualsoftwareentwicklung

Verwandte Artikel

70% aller IT-Modernisierungsprojekte scheitern! Mit generativer künstlicher Intelligenz (Gen AI) kann das Risiko bereits...

Mehr erfahren

Topics: Individualsoftwareentwicklung

Die richtige Microfrontend-Architektur kann Teams dabei helfen, effizient an komplexen Webanwendungen zu arbeiten und flexibel...

Mehr erfahren

Topics: Individualsoftwareentwicklung

Many leaders have high expectations when starting an agile transformation. Just imitating what, e.g. the Scrum Guide describes,...

Mehr erfahren

Topics: Individualsoftwareentwicklung