특정 노드에서 시작하고 끝나는 모든 경로를 찾으려합니다. 한 경로의 각 노드가 한 번만 나타납니다. 예를 들어Cypher : 반복되지 않는 단일 노드의 모든 체인을 찾는 방법은 무엇입니까?
,이 같은 그래프 : grafically
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(a)
(a)-[:REL]->(e)-[:REL]->(f)-[:REL]->(a)
(e)-[:REL]->(b)
:
e → b
↙ ↖ ↗ ↘
f → a ← c
사이퍼 코드 :
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)
내가 체인의 조사에서 시작하는 것을 좋아하는 것 (a)는
을 반환합니다.는 노드를 통해 두 번 통과하기 때문에 (F)를 반환 만
(f)->(a)->(e)->(f)
및 NOT
(f)->(a)->(b)->(c)->(a)->(e)->(f)
에서 시작하면서 (a).
나는 tryied :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
하지만 난 어떤 결과가있어. 내가 도달 할 수 있었던 가장이 쿼리와 시작에 불과 노드의 더 반복이없는 것입니다 :
MATCH p=(a {name:'F'})-[:REL*1..]->(a)
WHERE SINGLE(e IN TAIL(NODES(p)) WHERE e=a)
RETURN p
을하지만, 분명히 그것은 또한
(f)->(a)->(b)->(c)->(a)->(e)->(f)
을 반환하기 때문에 내가 원하는 게 아니에요 그 노드 (a)를 두 번 포함하는 경로입니다.
누군가 내게 해결책을 제안 할 수 있습니까?
미리 감사드립니다.
P. 내가 사용하는 Neo4j의 버전은 그래서 여기에 2.0
이전에이 답변을 보았습니까? http://stackoverflow.com/questions/13767748/returning-only-simple-paths-in-neo4j-cypher-query 여전히 유일한 방법 일 수 있으며 필요할 수 있습니다. @FrobberOfBits 답을 함께 사용하려면 Cypher를 사용해야합니까? – JohnMark13
좋은 충고, 친구. 아래 [@ JohnMark13] (http://stackoverflow.com/users/2477669/johnmark13)는 코드를 직접 알려주었습니다. 감사합니다. – mdalp