Elasticsearch (eBook)
262 Seiten
dpunkt (Verlag)
978-3-86491-826-1 (ISBN)
Florian Hopf arbeitet als freiberuflicher Softwareentwickler in Karlsruhe. Über diverse Content-Management-Systeme auf der Java-Plattform kam er schon früh mit Suchlösungen auf Basis von Lucene in Kontakt. Er ist verantwortlich für kleine und große Suchlösungen, im Intranet und Internet, für Web-Inhalte und anwendungsspezifische Daten, basierend auf Lucene, Solr und Elasticsearch. Er ist einer der Organisatoren der Java User Group Karlsruhe und des Search Meetup Karlsruhe.
Florian Hopf arbeitet als freiberuflicher Softwareentwickler in Karlsruhe. Über diverse Content-Management-Systeme auf der Java-Plattform kam er schon früh mit Suchlösungen auf Basis von Lucene in Kontakt. Er ist verantwortlich für kleine und große Suchlösungen, im Intranet und Internet, für Web-Inhalte und anwendungsspezifische Daten, basierend auf Lucene, Solr und Elasticsearch. Er ist einer der Organisatoren der Java User Group Karlsruhe und des Search Meetup Karlsruhe.
Inhaltsverzeichnis 5
Einführung 9
Motivation 9
Geschichte von Elasticsearch 9
Ein erstes Beispiel 11
Anwendungsfälle 13
Wann Elasticsearch? 14
Über dieses Buch 15
Danksagung 17
Eine Suchanwendung entsteht 19
Die Beispielanwendung 19
Dokumente indizieren 20
Der invertierte Index 24
Über die Query-DSL zugreifen 27
Die Indizierung über das Mapping konfigurieren 31
Suchergebnisse sortieren und paginieren 36
Facetten für Suchergebnisse 38
Die Anwendung vereinfachen 41
Zusammenfassung 43
Textinhalte auffindbar machen 45
Analyzing und der invertierte Index 45
Sprachspezifische Verarbeitung durch Stemming 48
Teilbegriffe finden 50
Ähnliche Begriffe mit der Fuzzy-Query finden 56
Mit mehrsprachigen Inhalten arbeiten 57
Die Suche verbessern 59
Hervorheben von Suchbegriffen im Auszug 65
Autovervollständigung 67
Zusammenfassung 72
Relevanz verstehen und beeinflussen 73
Relevanz für die Nutzer 73
Berechnung der Relevanz 74
Einfluss von Abfragen auf die Relevanz 77
Relevanz durch Boosting beeinflussen 82
Funktionen zur Ergebnissortierung 84
Relevanz im verteilten System 88
Relevanz verstehen 89
Zusammenfassung 90
Daten indizieren 91
Indizierungsstrategien 91
Dokumente einzeln indizieren 93
Dokumente gesammelt indizieren 95
Externe Datenquellen anbinden 97
Partial Updates – Dokumente aktualisieren 102
Interna zur Indizierung 104
Zusammenfassung 110
Elasticsearch als verteiltes System 111
Shards und Replicas 111
Suche im verteilten System 123
Kommunikation im Cluster 130
Indizierung im verteilten System 139
Zusammenfassung 140
Daten modellieren 141
Einsatzfelder für Elasticsearch 141
Gestaltung der Indexstruktur 144
Mapping-Optionen 150
Beziehungen zwischen Dokumenten 154
Zusammenfassung 159
Daten aggregieren 161
Einführung 161
Aggregationen 161
Bucket-Aggregationen 167
Metric-Aggregationen 171
Aggregationen im Praxiseinsatz 175
Zusammenfassung 178
Zugriff auf Elasticsearch 179
Zwischenschicht zum Zugriff 179
Der Java-Client 180
Der JavaScript-Client 184
Client-Bibliotheken auswählen 185
Zusammenfassung 186
Elasticsearch in Produktion 187
Installation 187
Elasticsearch dimensionieren 190
Elasticsearch konifigurieren 192
Das Betriebssystem für Elasticsearch konfigurieren 195
Mapping-Optionen zur Kontrolle der gespeicherten Inhalte 196
Caches 199
Monitoring 202
Datensicherung 205
Zusammenfassung 208
Zentralisiertes Logging mit Elasticsearch 209
Warum zentralisiertes Logging? 209
Der ELK-Stack 210
Logstash 210
Kibana 219
Skalierbares Setup 225
Curator zur Indexverwaltung 229
Alternative zur Loganalyse: Graylog 230
Zusammenfassung 235
Ausblick 237
Daten neu indizieren 241
Neuindizierung ohne Änderungen 242
Neuindizierung mit Änderungen 243
Ausblick 244
Der Twitter-River 245
Literaturverzeichnis 247
Index 259
www.dpunkt.de 0
2 Eine Suchanwendung entsteht
Nachdem die Einführung einen ersten Blick auf Elasticsearch ermöglicht hat, gehen wir in diesem Kapitel direkt zur Praxis über. Wir implementieren eine typische Suchanwendung von Grund auf und lernen dabei wichtige Eigenschaften von Elasticsearch, wie die Indizierung, unterschiedliche Abfragen und die Möglichkeit zur Facettierung kennen.
2.1 Die Beispielanwendung
Wir werden viele Eigenschaften von Elasticsearch an einem durchgehenden Beispiel ansehen, das uns in diesem und den nächsten Kapiteln begleiten wird: eine einfache Anwendung zur Suche nach Vortragsbeschreibungen. Wir können uns vorstellen, dass ein Konferenzveranstalter ein Archiv zur Verfügung stellen will, in dem Details zu den Inhalten der Vorträge und den Metadaten wie Sprecher oder Datum zur Verfügung stehen. Die Benutzer können damit für sie interessante Vorträge finden.
Abbildung 2-1: Screenshot einer klassischen Suchanwendung
In der Einführung haben wir bereits gesehen, wie einfach Elasticsearch installiert werden kann. Kapitel 10 bietet noch weitere Details dazu.
In einer ersten Iteration unserer Anwendung können wir uns eine einfache Suchseite mit Eingabefeld vorstellen, in das der Nutzer einzelne Schlüsselwörter eingeben kann. In einer Liste werden die zugehörigen Vorträge mit einigen ihrer Informationen angezeigt. Abbildung 2-1 zeigt, wie die Anwendung in einer ersten Iteration aussehen könnte.
2.1.1 Die Beispieldaten
Elasticsearch akzeptiert zu speichernde Daten in Form von JSON-Dokumenten. Woher diese Daten ursprünglich kommen, spielt zuerst einmal keine Rolle. Vorerst wird davon ausgegangen, dass die Vortragsdaten bereits im richtigen Format vorliegen. Ein erstes Beispiel kann folgendermaßen aussehen. Die Struktur wird im Laufe des Buches noch erweitert.
{
"title" : "Anwendungsfälle für Elasticsearch",
"speaker" : "Florian Hopf",
"date" : "2014-07-17T15:35:00.000Z",
"tags" : ["Java", "Lucene"],
"conference" : {
"name" : "Java Forum Stuttgart",
"city" : "Stuttgart"
}
}
Wir sehen, dass das Dokument unterschiedliche Eigenschaften hat. Manche davon sind Texte, wie title oder speaker. Das Datumsfeld date ist zwar ein JSON-String, ist allerdings in einem standardisierten Datumsformat hinterlegt. Die Schlagwörter zum Vortrag in dem Feld tags sind ein Array, die Konferenz, auf der der Vortrag stattfindet, ist schließlich noch als Subdokument hinterlegt.
Elasticsearch kann mit JSON dieser Art umgehen, das Dokument kann wie es ist gespeichert werden.
Was die Datenmenge angeht, werden wir uns in den ersten Kapiteln auf einige wenige Dokumente beschränken, da die Funktionalität im Vordergrund steht. Was zu beachten ist, wenn die Menge der Daten ansteigt, werden wir in späteren Kapiteln genauer betrachten.
2.2 Dokumente indizieren
Der erste Schritt zu einer Suchlösung besteht darin, unsere Dokumente in Elasticsearch zu speichern. Dazu ist es wichtig, die beiden Konzepte Index und Typ zu verstehen.
2.2.1 Index und Typ
Ein Index in Elasticsearch bildet eine logische Einheit zur Sammlung von Dokumenten. Welche Dokumente das sind, wird von der Anwendung bestimmt. In unserem Fall verwendet die Beispielapplikation nur den Index conference zur Speicherung aller Dokumente zu einer Konferenz. Wenn wir das Konzept mit der relationalen Welt vergleichen, entspricht ein Index einer Datenbank, die ebenfalls eine logische Sammlung von Entitäten ist. In einigen Bereichen weicht Elasticsearch hier jedoch deutlich ab, beispielsweise kann man mehrere Indizes gleichzeitig abfragen, was bei relationalen Datenbanken normalerweise nicht möglich ist.
Der Typ eines Dokuments beschreibt die Struktur der indizierten Dokumente. Für jede eigenständige Einheit, die wir im Index speichern wollen, existiert ein Typ. Für unsere Anwendung starten wir mit dem Typ talk, der Informationen zu den Vorträgen enthält. Ein weiterer möglicher Typ könnte speaker für Informationen zur Sprecherin sein. Wenn wir unseren Vergleich mit der relationalen Welt fortführen, sind die Typen vergleichbar mit Tabellen, allerdings gibt es auch hier im Detail starke Abweichungen.
Abbildung 2-2 visualisiert die Beziehung zwischen Index und Typ in einem Elasticsearch-Cluster mit dem Index conference zur Speicherung der Konferenzdaten und dem beispielhaften Index interaction zur Speicherung der Kommentare und Benutzerwertungen, die auf einer Homepage abgegeben werden können.
Abbildung 2-2: Mehrere Indizes und Typen in einer Elasticsearch-Instanz
Wie in Kapitel 1 erwähnt, erfolgt der Zugriff auf Elasticsearch meist über HTTP. Die URL enthält dann Informationen zum zu verwendenden Index im ersten Pfadsegment und zum Typ im zweiten Segment. Die gesamte URL entspricht dem Schema http://{host}:{port}/{index}/{typ}, also beispielsweise http://localhost:9200/conference/talk/.
Zugriff auf Elasticsearch
Auch wenn der Zugriff über HTTP es nahelegt: Elasticsearch sollte nur in Ausnahmefällen direkt im Internet verfügbar sein. In Kapitel 9 und 10 werden einige Aspekte zur Produktivnahme von Elasticsearch beschrieben.
2.2.2 Indizierung
Wie wir schon in der Einführung gesehen haben, können wir neue Dokumente einfach per HTTP-POST-Request hinzufügen. Index und Typ werden automatisch angelegt, wenn sie noch nicht existieren. Wird eine eigene ID vergeben, beispielsweise eine bestehende Datenbank-ID, können wir ein neues Dokument auch über einen PUT-Request anlegen und die ID mit in der URL übergeben.
curl -XPUT "http://localhost:9200/conference/talk/1" -d'
{
"title" : "Anwendungsfälle für Elasticsearch",
"speaker" : "Florian Hopf",
"date" : "2014-07-17T15:35:00.000Z",
"tags" : ["Java", "Lucene"],
"conference" : {
"name" : "Java Forum Stuttgart",
"city" : "Stuttgart"
}
}'
Wird keine ID angegeben, kann Elasticsearch diese generieren. Der vergebene Wert ist in der Antwort des Indizierungsaufrufs enthalten. Anhand der ID kann per GET-Request auf das Dokument zugegriffen werden.
curl -XGET "http://localhost:9200/conference/talk/1"
Für viele Anwendungen, in denen Elasticsearch nur zur Suche eingesetzt wird, ist der Zugriff anhand der ID eher selten. Wir können dadurch jedoch direkt sehen, dass unser Dokument vorhanden ist.
2.2.3 Die erste Suche
Wie mittlerweile üblich, soll unseren Benutzern der Zugriff auf die indizierten Vorträge per Suche nach Schlüsselwort möglich sein – die Stärke von Elasticsearch. Eine Nutzerin kann einen oder mehrere Begriffe in das Eingabefeld eingeben und wenn der Begriff im Dokument vorkommt, soll der Vortrag als Treffer in der Liste auftauchen.
Elasticsearch stellt unterschiedliche Suchmöglichkeiten zur Verfügung. Im einfachsten Fall wird ein GET-Request auf den _search-Endpunkt ausgeführt. Der Parameter q wird verwendet, um den Suchbegriff des Nutzers zu übergeben. Die folgende Abfrage fordert alle Dokumente an, die den Begriff Elasticsearch enthalten.
curl -XGET "http://localhost:9200/conference/talk/_search?q=Elasticsearch"
Elasticsearch schickt uns auf diese Anfrage eine ausführliche Antwort, die auch unser ursprünglich indiziertes Dokument enthält.
{
"took": 35,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.067124054,
"hits": [
{
"_index": "conference",
"_type": "talk",
"_id": "1",
"_score": 0.067124054,
"_source": {
"title": "Anwendungsfälle für Elasticsearch",
"speaker": "Florian Hopf",
"date":...
Erscheint lt. Verlag | 8.1.2016 |
---|---|
Verlagsort | Heidelberg |
Sprache | deutsch |
Themenwelt | Mathematik / Informatik ► Informatik ► Datenbanken |
Schlagworte | BI • Big Data • Business Intelligence • Business Warehouse • Data Science • Data Warehouse • Data Warehousing • HTTP • Information Retrieval • Java • JavaScript • JSON • Solr |
ISBN-10 | 3-86491-826-X / 386491826X |
ISBN-13 | 978-3-86491-826-1 / 9783864918261 |
Haben Sie eine Frage zum Produkt? |
Größe: 4,9 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich