Cypher: Wie finde ich alle Ketten einzelner Knoten, die nicht wiederholt wurden?

Ich möchte ALLE Pfade finden, die von / zu einem bestimmten Knoten beginnen und enden. Ich möchte, dass jeder Knoten in einem Pfad nur einmal vorkommt.

Zum Beispiel in einer Grafik wie dieser:

(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(a)
(a)-[:REL]->(e)-[:REL]->(f)-[:REL]->(a)
(e)-[:REL]->(b)

grafisch:

  e → b
 ↙ ↖ ↗ ↘
f → a ← c

Cypher Code:

CREATE (a { name:'A' })-[:REL]->(b {name:'B'})-[:REL]->(c { name:'C' })
       -[:REL]->(a)-[:REL]->(e {name:'E'})-[:REL]->(f {name:'F'})-[:REL]->(a),
       (e)-[:REL]->(b)

Ich möchte, dass die Suche nach Ketten ab (a) zurückkehrt

(a)->(b)->(c)->(a)

(a)->(e)->(f)->(a)

(a)->(e)->(b)->(c)->(a)

während ab (f) nur @ zurückgegeben wi

(f)->(a)->(e)->(f)

und nich

(f)->(a)->(b)->(c)->(a)->(e)->(f)

weil es zweimal durch den Knoten (a) läuft.

Ich habe versucht:

MATCH p=(a {name:'F'})-[:REL*1..]->(a) 
WHERE SINGLE(e1 IN TAIL(NODES(p)) WHERE SINGLE(e2 IN TAIL(NODES(p)) WHERE e1=e2))
RETURN p

aber ich habe kein ergebnis. Das Beste, was ich erreichen konnte, ist, mit dieser Abfrage keine Wiederholung nur des Startknotens zu haben:

MATCH p=(a {name:'F'})-[:REL*1..]->(a) 
WHERE SINGLE(e IN TAIL(NODES(p)) WHERE e=a)
RETURN p

aber offensichtlich ist es nicht das, was ich will, weil es auch @ zurückgi

(f)->(a)->(b)->(c)->(a)->(e)->(f)

das ist ein Pfad, an dem der Knoten (a) zweimal beteiligt ist.

Kann mir jemand eine Lösung vorschlagen?

Danke im Voraus

P.S. Die Version von Neo4j, die ich benutze, ist 2.0

Antworten auf die Frage(2)

Ihre Antwort auf die Frage