Zweitägiges Elasticsearch Training in Paris (Tag 2)
Relevanz der Ergebnisse
Am zweiten Tag begann die Schulung mit dem Thema “ Relevanz von Suchergebnissen”. Sie ist höher, wenn ein Suchbegriff öfter im Dokument auftaucht, jedoch auch niedriger, falls dieser Begriff oft in allen Dokumenten auftaucht. Die Relevanz kann über das Boosten (Verstärken) der Suchbegriffe oder Querys gesteuert werden. Es wird empfohlen, pro Query zu boosten, da dies flexibler ist.
"bool" : {
"should" : [
{
"match" : {
"name" : {
"query" : "frankreich"
}
}
},
{
"match" : {
"overview" : {
"query" : "deutschland",
"boost" : 3
}
}
}
]
}
Facetten
Am Beispiel Kibana kann man gut erkennen, wie man Facetten einsetzen kann [1]. Normalerweise würde ich hier das Konzept mit einigen Codebeispielen erläutern, jedoch werden Facetten in Zukunft nicht mehr weiterentwickelt, und ab der Version 1.0 werden Aggregationen unterstützt [2]
Beziehungen zwischen Dokumente
Bei Beziehungen zwischen Dokumente kann man zwischen einem Inner Object, Nested Object[3] oder einer Parent-Child[4] Beziehung wählen. Man wählt ein internes (inner) Objekt, wenn es sich um eine 1:1-Beziehung handelt, und eingebettet (nested), wenn es sich um 1:m-Beziehungen handelt. Bei vielen eingebetteten Objekten kann es kompliziert werden, wenn man Änderungen macht, da man das ganze Dokument reindizieren muss. Hier bieten sich Parent-Child Beziehungen an, da man die beiden Dokumente unabhängig voneinander ändern kann.
Verwaltung von Elasticsearch
Gegen Ende des Kurses wurde die Verwaltung von Elasticsearch behandelt. Wenn man ein Dokument indiziert, wird normalerweise der Index mit angelegt. Man sollte sich in Produktion überlegen, dieses Feature durch die Konfiguration »action.auto_create_index« - die man auf »false« setzt - auszuschalten, um mehr Sicherheit zu gewährleisten. Eine weitere Konfiguration, die man in Produktion einstellen sollte, ist »action.disable_delete_all_indices«, damit man nicht alle Indizes unwiderruflich löschen kann. Diese Einstellungen sind besonders dann wichtig, wenn man die Sicherheit des Netzwerks nicht aktiv managt.
Alias
Besonders wurde das Thema der Aliase betont. Dies wird von Anfänger normalerweise übersehen, doch es kann einen in einer Produktivumgebung retten und ist für Hochverfügbarkeit[5] wichtig.
Ein Alias auf einem Index wird angelegt durch:
curl -XPOST localhost:9200/_aliases -d ‚{
»actions«: [
{ »add«: {
»alias«: »my_index«,
»index«: »twitter«
}}
]
}‚
Man kann ein Alias auch auf Filter oder andere Elemente anlegen.
Bei einer Internet-Plattform, bei der viele Kunden viele Daten verwalten, wurde empfohlen, kein Index pro Kunde anzulegen, sondern erst mal alle Kunden auf dem gleichen Index zu speichern. Falls ein Kunde viele Dokumente hochlädt, kann man seine Dokumente auf einem anderen Index reindizieren und mit Hilfe eines Alias die Suchanfragen und die neuen Dokumente umleiten.
Insgesamt war es eine sehr informative Schulung, in der noch viel mehr Themen behandelt wurden, als ich hier in diesem Post beschreiben konnte. Ich kann allen, die an Elasticsearch und verteilter Suche interessiert sind, die Schulung empfehlen. Elasticsearch ist mittlerweile ein integraler Bestandteil unseres Softwarestacks bei exensio geworden.
Links
[1] Siehe http://www.elasticsearch.org/blog/kibana-whats-cooking/ und http://www.elasticsearch.org/overview/kibana/
[2] Siehe https://github.com/elasticsearch/elasticsearch/issues/3300
[3][4] Query https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
[5] http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/