Wie wird ein join in Elasticsearch — oder auf Lucene-Ebene
Was ist der beste Weg, um die Entsprechung einer SQL join-in Elasticsearch?
Ich habe eine SQL-setup mit zwei großen Tabellen: Personen und Gegenstände.
Eine Person kann eigene viele Elemente.
Sowohl Personen-und Item-Zeilen kann sich ändern (D. H. aktualisiert).
Ich habe zu laufen Suche, die filter von beiden Aspekten der person und der Sache.
In Elasticsearch, wie es aussieht, könnte Person a verschachtelten Dokument der Artikel, dann nutzen Sie has_child
.
Aber: wenn Sie dann aktualisieren Sie eine Person, die ich glauben, Sie müssten ein update alle Element Sie besitzen (und das kann eine Menge sein).
Ist das richtig?
Ist es ein schöner Weg, um dieses Problem zu lösen-Abfrage in Elasticsearch?
- Nur eine kleine Terminologie-Problem: wenn Sie die
has_child
, die person ein untergeordnetes Dokument, nicht um eine geschachtelte eine (Eltern - /Kind-vs geschachtelten Dokumenten). - können wir ElasticSearch Hive-Anschluss zu tun, eine JOIN-operation aus dem Bienenstock auf ElasticSearch die Daten speichern ? - github.com/elastic/elasticsearch-hadoop
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie schon erwähnt ist der Weg zu gehen, ist die Eltern/Kind. Der Punkt ist, dass verschachtelte Dokumente sind extrem performant, aber in Reihenfolge für Sie aktualisiert werden, müssen Sie erneut Einreichen die gesamte Struktur (Eltern + geschachtelten Dokumenten). Obwohl die interne Umsetzung von geschachtelten Dokumenten aus den einzelnen lucene-Dokumente, diese verschachtelten doc sind nicht sichtbar, noch direkt zugänglich. In der Tat, wenn mit geschachtelten Dokumenten an, die Sie dann brauchen, um die ordnungsgemäße Verwendung von Abfragen für den Zugriff auf Sie (verschachtelte Abfrage, geschachtelte filter, verschachtelte Facette etc.).
Auf der anderen Seite Eltern/Kind-Bereich können Sie separate Dokumente, die aufeinander verweisen, die aktualisiert werden können, unabhängig. Es hat eine Kosten in Bezug auf Leistung und Speicher verwendet, aber es ist viel flexibler als verschachtelte Dokumente.
Wie bereits in dieser Artikel obwohl, die Tatsache, dass elasticsearch hilft Ihnen bei der Verwaltung der Beziehungen bedeutet nicht, dass müssen Sie verwenden diese Funktionen. In einer Menge von komplexen usecases ist es einfach besser, einige benutzerdefinierte Logik auf dem application-layer, die Griffe mit Beziehungen. In der Facette gibt es Einschränkungen mit parent/child auch: zum Beispiel können Sie nie wieder bekommen beide Eltern und Kinder zur gleichen Zeit, im Gegensatz zu geschachtelten Dokumenten an, die nicht wieder zu bekommen nur übereinstimmende Kinder (für jetzt).
Werfen Sie einen Blick auf meine Antwort für: In Elasticsearch, können mehrere top-level-Dokumente teilen sich eine einzige verschachtelte Dokument?
Diese beschreibt die Verwendung von
_parent
mapping als eine Möglichkeit, um das Problem zu vermeiden brauchen, um zu aktualisieren Sie jedes Element, wenn eine Person aktualisiert wird.