2013-10-05 4 views
2

Neo4j가 자신과 관계가있는 노드와 관련된 쿼리를 처리하는 방법을 알기 위해 간단한 예제를 설정하고 Cypher에게 모든 경로를 제공 할 수 없습니다. 여기 Cypher 쿼리가 모든 예상 경로를 반환하지 않음

내 데이터의 :

CREATE (A {name:'A'}), (B {name:'B'}), (C {name:'C'}) 
CREATE 
    (A)-[:REL]->(A), 
    (A)-[:REL]->(B), 
    (A)-[:REL]->(C), 
    (B)-[:REL]->(A), 
    (B)-[:REL]->(B), 
    (B)-[:REL]->(C), 
    (C)-[:REL]->(A), 
    (C)-[:REL]->(B), 
    (C)-[:REL]->(C) 

그리고 여기에 내가 뭘 쿼리의 :

A, A, A, B 
A, A, B, B 
A, A, C, B 
A, B, A, B 
A, B, B, B 
A, B, C, B 
A, C, A, B 
A, C, B, B 
A, C, C, B 

하지만 제가받은 것은 :

MATCH p = (x)-[:REL*1..3]->(y) 
WHERE x.name='A' AND y.name='B' AND LENGTH(p) = 3 
RETURN nodes(p) 

내 예상 결과

[(3 {name:"A"}), (2 {name:"B"}), (1 {name:"C"}), (2 {name:"B"})] 
[(3 {name:"A"}), (1 {name:"C"}), (3 {name:"A"}), (2 {name:"B"})] 
[(3 {name:"A"}), (1 {name:"C"}), (2 {name:"B"}), (2 {name:"B"})] 
[(3 {name:"A"}), (1 {name:"C"}), (1 {name:"C"}), (2 {name:"B"})] 
[(3 {name:"A"}), (3 {name:"A"}), (2 {name:"B"}), (2 {name:"B"})] 
[(3 {name:"A"}), (3 {name:"A"}), (1 {name:"C"}), (2 {name:"B"})] 

그래서 내가받지 못하고있어 경로는 다음과 같습니다

A, A, A, B 
A, B, B, B 
A, B, A, B 

는 사람이 어떤 통찰력을 가지고 있습니까? 사전에 http://console.neo4j.org/?id=4srv4h

감사 :

는 여기 콘솔입니다.

답변

1

A에서 A까지 단 하나의 링크 만 있으므로 A에서 A로만 이동할 수 있습니다. 그것이 A, A, A (또는 B, B, B)를 얻지 못하는 이유입니다 ...

마찬가지로, 처음에는 두 사람 사이에서 A-> B 관계를 사용하므로

마지막으로 :REL*3을 수행하고 length(p) = 3을 남겨 둘 수 있습니다.

+0

아, 맞아. 감사합니다 웨스. 내가 원하는 결과를 얻기 위해 어떤 트릭을 알고 있습니까? 이전 상태 (노드)로 들어갈 수있는 확률 과정을 모델링하려고합니다. 따라서 내 쿼리가 트래버스에서 관계를 반복 할 수있는 것이 바람직합니다. 그렇지 않다면이 아이디어를 다시 생각해야 할 것입니다. :) –

+0

경로가 얼마나 오래 있는지 알고 계십니까? WITH와 헤어질 수 있습니다. 동작이 이와 같은 이유는주기가있는 무한 경로를 방지하기 위해서입니다. Rels는 한 번만 통과 할 수 있습니다. –

+0

http://console.neo4j.org/r/sl0z99 –

관련 문제