Sie sind hier
E-Book

Elasticsearch

Ein praktischer Einstieg

AutorFlorian Hopf
Verlagdpunkt
Erscheinungsjahr2016
Seitenanzahl262 Seiten
ISBN9783864918261
FormatPDF/ePUB
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis32,90 EUR
Elasticsearch ist ein auf Apache Lucene basierender Suchserver, der JSON-Dokumente speichern und durchsuchen kann. Durch den verteilten Aufbau ist die Ablage sehr großer Datenmengen möglich. Neben Volltextinhalten können auch strukturierte Daten verwaltet und mit Aggregationen leicht gruppiert und ausgelesen werden. Dokumente, Suchanfragen und administrative Aufgaben werden in JSON formuliert und per HTTP oder über die Java-API ausgetauscht. Das Buch stellt anhand eines durchgehenden Beispiels die Nutzung von Elasticsearch vor. Nach einem einführenden Kapitel, in dem eine klassische Suchanwendung von Grund auf aufgebaut wird, werden in den anschließenden Kapiteln jeweils unterschiedliche Aspekte genauer beleuchtet. Unter anderem werden die folgenden Themenbereiche angesprochen: • Umgang mit Text • Relevanz in Suchergebnissen • Möglichkeiten der Indizierung • Verteilung der Daten • Datenmodellierung • Aggregationen • Aspekte des Produktivbetriebs • Logdaten in Elasticsearch Der Großteil des Buches ist unabhängig von der Programmiersprache gehalten, es wird jedoch auch auf die Java- und JavaScript-APIs zum Zugriff auf Elasticsearch eingegangen. Der Leser hat nach der Lektüre das notwendige Rüstzeug, um eigene Anwendungen auf Basis von Elasticsearch umzusetzen.

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.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

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":...

Blick ins Buch
Inhaltsverzeichnis
Inhaltsverzeichnis5
Einführung9
Motivation9
Geschichte von Elasticsearch9
Ein erstes Beispiel11
Anwendungsfälle13
Wann Elasticsearch?14
Über dieses Buch15
Danksagung17
Eine Suchanwendung entsteht19
Die Beispielanwendung19
Dokumente indizieren20
Der invertierte Index24
Über die Query-DSL zugreifen27
Die Indizierung über das Mapping konfigurieren31
Suchergebnisse sortieren und paginieren36
Facetten für Suchergebnisse38
Die Anwendung vereinfachen41
Zusammenfassung43
Textinhalte auffindbar machen45
Analyzing und der invertierte Index45
Sprachspezifische Verarbeitung durch Stemming48
Teilbegriffe finden50
Ähnliche Begriffe mit der Fuzzy-Query finden56
Mit mehrsprachigen Inhalten arbeiten57
Die Suche verbessern59
Hervorheben von Suchbegriffen im Auszug65
Autovervollständigung67
Zusammenfassung72
Relevanz verstehen und beeinflussen73
Relevanz für die Nutzer73
Berechnung der Relevanz74
Einfluss von Abfragen auf die Relevanz77
Relevanz durch Boosting beeinflussen82
Funktionen zur Ergebnissortierung84
Relevanz im verteilten System88
Relevanz verstehen89
Zusammenfassung90
Daten indizieren91
Indizierungsstrategien91
Dokumente einzeln indizieren93
Dokumente gesammelt indizieren95
Externe Datenquellen anbinden97
Partial Updates – Dokumente aktualisieren102
Interna zur Indizierung104
Zusammenfassung110
Elasticsearch als verteiltes System111
Shards und Replicas111
Suche im verteilten System123
Kommunikation im Cluster130
Indizierung im verteilten System139
Zusammenfassung140
Daten modellieren141
Einsatzfelder für Elasticsearch141
Gestaltung der Indexstruktur144
Mapping-Optionen150
Beziehungen zwischen Dokumenten154
Zusammenfassung159
Daten aggregieren161
Einführung161
Aggregationen161
Bucket-Aggregationen167
Metric-Aggregationen171
Aggregationen im Praxiseinsatz175
Zusammenfassung178
Zugriff auf Elasticsearch179
Zwischenschicht zum Zugriff179
Der Java-Client180
Der JavaScript-Client184
Client-Bibliotheken auswählen185
Zusammenfassung186
Elasticsearch in Produktion187
Installation187
Elasticsearch dimensionieren190
Elasticsearch konifigurieren192
Das Betriebssystem für Elasticsearch konfigurieren195
Mapping-Optionen zur Kontrolle der gespeicherten Inhalte196
Caches199
Monitoring202
Datensicherung205
Zusammenfassung208
Zentralisiertes Logging mit Elasticsearch209
Warum zentralisiertes Logging?209
Der ELK-Stack210
Logstash210
Kibana219
Skalierbares Setup225
Curator zur Indexverwaltung229
Alternative zur Loganalyse: Graylog230
Zusammenfassung235
Ausblick237
Daten neu indizieren241
Neuindizierung ohne Änderungen242
Neuindizierung mit Änderungen243
Ausblick244
Der Twitter-River245
Literaturverzeichnis247
Index259
www.dpunkt.de0

Weitere E-Books zum Thema: Datenbanken - Datenbanktheorie - Datenbankentwicklung

Oracle Security in der Praxis

E-Book Oracle Security in der Praxis
Sicherheit für Ihre Oracle-Datenbank Format: PDF

Sicherheit ist gerade für Datenbanken ein zentrales Thema, da sie sehr häufig die Basis für den Geschäftserfolg bilden. Die Angriffsmöglichkeiten sind zahlreich und seit auch über das Internet auf…

Oracle Security in der Praxis

E-Book Oracle Security in der Praxis
Sicherheit für Ihre Oracle-Datenbank Format: PDF

Sicherheit ist gerade für Datenbanken ein zentrales Thema, da sie sehr häufig die Basis für den Geschäftserfolg bilden. Die Angriffsmöglichkeiten sind zahlreich und seit auch über das Internet auf…

111 Thesen zur erfolgreichen Softwareentwicklung

E-Book 111 Thesen zur erfolgreichen Softwareentwicklung
Argumente und Entscheidungshilfen für Manager. Konzepte und Anleitungen für Praktiker Format: PDF

Ziel dieses Buches ist es, Managern Argumente und Entscheidungshilfen für die Einführung effizienter Techniken der Softwareentwi- lung zu geben, und Praktiker von der Notwendigkeit effizienter…

111 Thesen zur erfolgreichen Softwareentwicklung

E-Book 111 Thesen zur erfolgreichen Softwareentwicklung
Argumente und Entscheidungshilfen für Manager. Konzepte und Anleitungen für Praktiker Format: PDF

Ziel dieses Buches ist es, Managern Argumente und Entscheidungshilfen für die Einführung effizienter Techniken der Softwareentwi- lung zu geben, und Praktiker von der Notwendigkeit effizienter…

111 Thesen zur erfolgreichen Softwareentwicklung

E-Book 111 Thesen zur erfolgreichen Softwareentwicklung
Argumente und Entscheidungshilfen für Manager. Konzepte und Anleitungen für Praktiker Format: PDF

Ziel dieses Buches ist es, Managern Argumente und Entscheidungshilfen für die Einführung effizienter Techniken der Softwareentwi- lung zu geben, und Praktiker von der Notwendigkeit effizienter…

111 Thesen zur erfolgreichen Softwareentwicklung

E-Book 111 Thesen zur erfolgreichen Softwareentwicklung
Argumente und Entscheidungshilfen für Manager. Konzepte und Anleitungen für Praktiker Format: PDF

Ziel dieses Buches ist es, Managern Argumente und Entscheidungshilfen für die Einführung effizienter Techniken der Softwareentwi- lung zu geben, und Praktiker von der Notwendigkeit effizienter…

111 Thesen zur erfolgreichen Softwareentwicklung

E-Book 111 Thesen zur erfolgreichen Softwareentwicklung
Argumente und Entscheidungshilfen für Manager. Konzepte und Anleitungen für Praktiker Format: PDF

Ziel dieses Buches ist es, Managern Argumente und Entscheidungshilfen für die Einführung effizienter Techniken der Softwareentwi- lung zu geben, und Praktiker von der Notwendigkeit effizienter…

Weitere Zeitschriften

Ärzte Zeitung

Ärzte Zeitung

Zielgruppe:  Niedergelassene Allgemeinmediziner, Praktiker und Internisten. Charakteristik:  Die Ärzte Zeitung liefert 3 x pro Woche bundesweit an niedergelassene Mediziner ...

BMW Magazin

BMW Magazin

Unter dem Motto „DRIVEN" steht das BMW Magazin für Antrieb, Leidenschaft und Energie − und die Haltung, im Leben niemals stehen zu bleiben.Das Kundenmagazin der BMW AG inszeniert die neuesten ...

DSD Der Sicherheitsdienst

DSD Der Sicherheitsdienst

Der "DSD – Der Sicherheitsdienst" ist das Magazin der Sicherheitswirtschaft. Es erscheint viermal jährlich und mit einer Auflage von 11.000 Exemplaren. Der DSD informiert über aktuelle Themen ...