Comment faire une jointure dans Elasticsearch — ou au niveau de Lucene
Quelle est la meilleure façon de faire l'équivalent d'une jointure SQL dans Elasticsearch?
J'ai un programme d'installation de SQL avec deux grandes tables: des Personnes et des Objets.
Une Personne peut posséder de nombreux éléments.
La fois la Personne et les lignes de poste peut changer (c'est à dire être à jour).
J'ai exécuter des recherches qui filtre par les aspects de la personne et de l'objet.
Dans Elasticsearch, il semble que vous pouvez faire de la Personne un imbriquée document de l'Élément, puis utilisez has_child
.
Mais: si vous mettez ensuite à jour d'une Personne, je pense que vous auriez besoin de mettre à jour chaque Article qu'ils possèdent (qui pourrait être beaucoup).
Est-ce exact?
Est-il une bonne façon de résoudre cette question dans Elasticsearch?
has_child
, la personne serait un enfant de document, pas un imbriqués l'un (parent/enfant vs documents imbriqués).peut-on utiliser ElasticSearch Ruche connecteur de faire une opération de JOINTURE de la Ruche sur ElasticSearch banque de données ? - github.com/elastic/elasticsearch-hadoop
OriginalL'auteur Daniel Winterstein | 2013-10-22
Vous devez vous connecter pour publier un commentaire.
Comme déjà mentionné, le chemin à parcourir est parent/enfant. Le point est que les documents imbriqués sont extrêmement performant mais pour être mis à jour, vous devez re-soumettre l'ensemble de la structure (parent + documents imbriqués). Bien que la mise en œuvre interne de documents imbriqués consiste à séparer les documents, ces imbriquée doc ne sont pas visibles ni accessibles directement. En fait, lors de l'utilisation de documents imbriqués ensuite, vous besoin d'utiliser correctement les requêtes d'accès (requête imbriquée, filtre imbriqué, imbriqués facette etc.).
Sur l'autre main parent/enfant permet de séparer les documents qui s'y réfèrent les uns des autres, ce qui peut être mis à jour indépendamment. Il a un coût en termes de performances et de mémoire utilisé, mais il est beaucoup plus souple que les documents imbriqués.
Comme mentionné dans cet article, est le fait que elasticsearch vous aide à gérer les relations ne signifie pas que vous devez utiliser ces fonctionnalités. Dans beaucoup de complexes usecases il est juste mieux pour avoir une certaine logique personnalisée sur la couche application qui gère les relations. Dans la facette il y a des limites avec le parent/enfant: par exemple, vous pouvez ne jamais obtenir de nouveau les deux parents et les enfants en même temps, par opposition aux documents imbriqués qui ne permet pas de revenir seulement de correspondance des enfants (pour l'instant).
peut-on utiliser ElasticSearch Ruche connecteur de faire une opération de JOINTURE de la Ruche sur ElasticSearch banque de données ? - github.com/elastic/elasticsearch-hadoop
OriginalL'auteur javanna
Prendre un coup d'oeil à ma réponse: Dans Elasticsearch, peut plusieurs documents de niveau supérieur partager une seule imbriquée document?
Ce traite de l'utilisation de
_parent
la cartographie comme un moyen d'éviter le problème avec le besoin de mettre à jour chaque Élément lorsqu'une Personne est mise à jour.c'est probablement la peine de poser une nouvelle question pour obtenir une réponse au sujet de la Ruche connecteur
OriginalL'auteur Phil