2017-04-07 4 views
0

J'ai un cas spécifique où j'ai deux étiquettes Personne et Société. La personne a deux nœuds X et Y et la société a un nœud unique. Les deux personnes ont une relation avec la société HAS_EMPLOYEE.Neo4j - Traverser d'un noeud à un autre qui sont indirectement connectés par le noeud parent

Je veux trouver une relation entre X et Y, c'est-à-dire qu'ils travaillent pour la même société.

Comment faire ça dans Neo4j? Étant donné seulement les nœuds X et Y?

Répondre

1

Cela dépendra si vous êtes à la recherche d'une connexion spécifique (via un: noeud Société), ou si vous recherchez simplement une connexion. Disons que: Les nœuds de personnes ont un nom, et que les nœuds de personne X et Y ont les noms 'x' et 'y', donc nous pouvons leur correspondre. Disons aussi que vous avez un index sur: Person (nom) afin que nous puissions rechercher rapidement les nœuds.

Si la requête que nous voulons est « do personnes x et y partagent la même société », la requête pour cela, le retour de la société en question, est:

match (x:Person{name:'x'})<-[:HAS_EMPLOYEE]-(comp:Company)-[:HAS_EMPLOYEE]->(y:Person{name:'y'}) 
return comp 

Mais si nous ne savons pas comment ces personnes sont connectées, ou même si elles sont connectées, alors nous voudrons probablement exécuter une correspondance shortestPath() entre les nœuds, et voir ce qui les relie.

Il est utile de définir des limites supérieures pour cette correspondance. Pour l'instant, utilisons 8 sauts max.

match path=shortestPath((x:Person{name:'x'})-[*..8]-(y:Person{name:'y'})) 
return path 
+0

Je cherchais le chemin le plus court, c'est-à-dire que nous ne savons pas qu'il existe une société qui les relie. Réponse parfaite. –