2017-02-02 1 views
1

그래프의 노드의 폭 첫 번째 검색에서 쿼리하는 방법 :Neo4j : 나는 다음과 같이 하나의 관계 neo4j에서 그래프 모델을 가지고있다

(node1)-[:CONNECTS]->(node2) 

다음 쿼리를 시도하지만 저를 줄 것이다 양방향 결과 :

MATCH (cs:Label1)-[r:CONNECTS*]->(es:Label2) 
WHERE cs.property = 'startNodeString' 
RETURN cs,es,r 
: 만 주어진 루트 노드의 자식 노드의 첫 번째 레벨을 반환합니다 쿼리 아래

MATCH (n:Label1)-[r:CONNECTS*1..]-(m) 
WHERE n.name = 'startNodeString' 
RETURN n,r,m 

각 자식 노드를 통과하는 루트 노드부터 시작하여 각 수준의 깊이, 즉 'n'수준까지 재귀 적으로 각 자식 노드를 캡처하고 싶습니다.

사이퍼 쿼리에 대한 귀하의 도움에 감사드립니다.

답변

1

이 경우 APOC Procedures이 필요합니다. 구체적으로는 path expander입니다.

다음은 사용의 예 :

MATCH (cs:Label1) 
WHERE cs.property = 'startNodeString' 
CALL apoc.path.expandConfig(cs,{relationshipFilter:"CONNECTS>",maxLevel:3,uniqueness:"NODE_GLOBAL"}) YIELD path 
WITH cs, RELATIONSHIPS(path) as r, LAST(NODES(path)) as es 
WHERE es:Label2 
RETURN cs,es,r 

모든 경로 확장기 BFS를 사용하여 기본적를 호출합니다. NODE_GLOBAL 고유성은 노드가 한번만 트래버스된다는 것을 의미합니다. maxLevel을 원하는 깊이로 설정하거나 완전히 생략 할 수 있습니다.

+0

$ NEO4J_HOME/plugins 아래에 apoc 프로 시저를 설치하고 다시 시작한 후 apoc 프로 시저를 호출 할 수 없습니다. 쉘에서 다음 오류가 발생합니다> neo4j-sh (?) $ CALL dbms.procedures() > 알 수없는 명령 'call' –

+0

실행중인 Neo4j의 버전은 무엇입니까? 버전 3.0 이상은 CALL 키워드 및 사용자 작성 프로 시저를 지원해야합니다. 그러나 버전 3.1.x를 사용하는 것이 더 좋습니다. – InverseFalcon

+0

이제 MacOS에서 버전 3.1.1로 작업하고 있습니다. 최신 코드에서 스냅 샷을 만들어 plugins 디렉토리에 복사합니다./Applications/Neo4j \ Community \ Edition.app/Contents/Resources/app/plugins/; Neo4j 시작 실패 : 'org.neo4j.server.database.LifecycleManagingDatabase.6900bc23'구성 요소가 성공적으로 초기화되었지만 시작하지 못했습니다. 첨부 원인 예외를 참조하십시오. –

관련 문제