2017-07-03 5 views
0

J'utilise neo4j comme une base de données de graphes et je veux revenir d'un noeud de départ voisins de ce noeud, et tous les voisins liés à une profondeur variant de 1 à 3. Je le fais mais il reste coincé: Notez que c'est un grand graphique.Neo4j Traversée de profondeur de graphique Cypher

start n = node(*) where n.NID contains "9606.ENS3" 
MATCH (n)-[Rel1*1..3]-(m) RETURN m; 

Quelqu'un a une idée de la façon de faire traversals sur un graphique, et d'obtenir un résultat?

+0

Quelle version Neo4j utilisez-vous? Quelle erreur obtenez vous? –

+0

J'utilise la communauté 3.2.1 –

Répondre

1

Votre question montre une ancienne syntaxe Cypher. Le docs dit à propos de la clause START:

La clause START ne doit être utilisée que lors de l'accès aux index hérités. Dans tous les autres cas, utilisez MATCH à la place (voir Section 3.3.1, «MATCH»).

Je crois que cela devrait fonctionner:

MATCH(n)-[Rel1*1..3]->(m) 
WHERE n.NID contains "9606.ENS3" 
RETURN m 
+0

Un indice à optimiser car c'est un grand ensemble de données? les bugs de browzer –

+0

Vous pouvez essayer de spécifier une étiquette connue dans les nœuds 'n' et' m' (quelque chose comme 'MATCH (n: NodeTypeA) - [Rel1 * 1..3] -> (m: NodeTypeB)'). Créer un index dans la propriété n.NID est également une bonne idée. –

+0

Une contrainte unique est déjà créée et l'ajout des étiquettes la rend insecte –