Question

Ceci est un graphe dont les nœuds existent dans de nombreux composants connectés à la fois parce que les relations d'un nœud sont une collection de groupes de bord de sorte que seul un bord par groupe de bord peut être présent à la fois. Je dois être en mesure de trouver tous les composants connectés qu'un noeud existe dans. Quelle serait la meilleure façon de conserver ce graphique dans Neo4j de trouver rapidement tous les composants connectés qu'un noeud existe dans? Est-il possible d'utiliser le construit en traversals pour le faire?

Aussi: est-il un nom pour ce genre de graphique? Je vous remercie de toute aide / idées.

Mise à jour:

Désolé de ne pas être clair. Tous les nœuds sont du même type. Les noeuds ont un nombre variable de groupes de bord. Exactement un bord de chaque groupe de bord doit être choisi pour une composante connexe particulière. Je vais essayer d'expliquer par l'exemple:

Node x1 is related to: (x2 or x3 or x4) AND (x5 or x6) AND (x7)
Node x2 is related to: (x8) AND (x9 or x10)

So premier groupe de bord de x1 est (x2, x3, x4), le deuxième groupe de bord est (x5, x6), et son groupe de troisième bord est (x7).

Alors voici quelques composantes connexes que x1 existe dans:

CC1:

x1 is related to: x2, x5, x7
x2 is related to: x8 x9 

CC2:

x1 is related to: x2, x6, x7
x2 is related to: x8, x9

CC3:

x1 is related to: x3, x5, x7

CC4:

x1 is related to: x3, x6, x7

etc.

Je suis reconnaissant pour votre aide dans ce domaine.

Update2:

Je pense que je serai en mesure de le faire s'il y a une réponse à cette question: Comment puis-je spécifier quel type relation à utiliser en fonction du noeud courant à chaque étape d'un parcours avec Neo4j?

Était-ce utile?

La solution

Ils je comprends votre question, vous avez ainsi un certain nombre de noeuds, nous allons les appeler X nœuds , qui sont connectés à un certain nombre de noeuds de type (ou similaire), nous appellerons ces nœuds noeuds T . Un noeud X peut avoir des connexions à plusieurs noeuds T, mais une seule connexion à chaque noeud T, ou peut-être qu'une seule connexion à chaque type de noeud T (votre description est un peu floue ici).

La façon dont je modéliser est d'utiliser une RelationshipType pour chaque (type de) noeud T. Ensuite, vous pouvez utiliser x_node.getRelationships (T_TYPE_ONE, T_TYPE_TWO, ... etc ...) pour obtenir tous les nœuds T à partir d'un noeud X. Lorsque vous muter un nœud X est l'endroit où vous devez maintenir votre invariant qu'il ne peut avoir au plus une relation entre (type de) noeud T. Vous faites cela en utilisant x_node.getSingleRelationship (THE_T_TYPE_YOURE_MUTATING), si cela renvoie NULL, il est sûr d'ajouter une nouvelle relation de ce type, si elle renvoie une relation, vous devrez l'enlever avant de pouvoir ajouter le nouveau.

exemple ASCII-art de ce modèle (comme je l'interprète):

(x1)--T_ONE-->(t1a)   (t1b)<--T_ONE--(x2)--T_FOUR-->(t4a)
 |\                                   |
 \ |---T_TWO-->(t2a)                 /
  \                                 /
   |---T_THREE-->(t3a)<--T_THREE---/

Dans l'exemple ci-dessus les deux noeuds X font partie de la composante T_ONE, mais x1 fait partie du composant de T_ONE T1A et x2 est une partie de T1B. Ils sont tous deux partie du composant de T_THREE T3A, alors x1 fait partie du composant de T_TWO T2A, et x2 est une partie du composant de T_FOUR T4A. Interrogation dans cet exemple ressemblerait à quelque chose comme:

Iterable<Relationship> x1_comps = x1.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);
Iterable<Relationship> x2_comps = x2.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);

Et la mise à jour ressemblerait à ceci:

void setComponent(Node xNode, RelationshipType tType, Node tNode) {
    Relationship current = xNode.getSingleRelationship(tType);
    if (current != null) current.delete();
    xNode.createRelationshipTo(tNode, tType);
}

S'il vous plaît laissez-moi savoir si je l'ai mal interprété vos besoins, et je serai heureux de donner à votre description mise à jour un coup de poignard.

Autres conseils

En ce qui concerne l'autre question, je l'ai souligné quelques possibilités de fonctions à grains fins à Comment puis-je spécifier quel type relation à utiliser en fonction du noeud courant à chaque étape d'un parcours avec Neo4j? En fait, ne pas utiliser un transbordeur, mais l'node.getRelationship API * plus direct et construire votre propre itération pour le contrôle à grain fin.

Est-ce que résoudre votre problème?

/ Peter Neubauer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top