2017-12-08 2 views
0

Neo4j으로 만든 큰 그래프 데이터베이스에는 "E"와 "I"의 두 가지 관계 유형이 있습니다.
n0이라는 시작 노드를 사용하여 두 개의 그래프를 추출하고 싶습니다. 첫 번째 그래프 Gxi"I" 관계를 기반으로 무작위로 얻어야합니다. 다음 요청은 잘못되었지만 구현하려는 아이디어입니다. 여기에 10 개 이웃 무작위로neo4j : 무작위 그래프 추출

MATCH r1:(n0)-[:I]-(n1) 
WITH random(n1) LIMIT 10 
MATCH r2:(n1)-[:I]-(n2) 
WITH random(n2) LIMIT 10*10 
MATCH r3:(n2)-[:I]-(n3) 
WITH random(n3) LIMIT 10*10*10 
MATCH r4:(n4)-[:I]-(n4) 
WITH random(n4) LIMIT 10*10*10*10 
RETURN r1+r2+r3+r4 

그런 다음 우리가 관계 "E"Gxi의 노드에 기초하여 제 2 그래프 Gxe를 작성하고자하는 마지막 단계의 각 노드에 대해 선택된다.

도움 주셔서 감사합니다.

답변

0

APOC Procedures 여기에서 도움을 줄 수 있습니다. 컬렉션에서 임의의 항목을 선택하는 데 사용할 수있는 컬렉션 함수가 있으며 LIMIT을 사용하지 않고 컬렉션의 조각을 얻을 수 있습니다.

더 까다로운 부분은 실제로 길을 따라 하위 경로를 수집합니다.

// assume already matched to start node n 
MATCH r = (n)-[:I]-() 
WITH apoc.coll.randomItems(collect(r), 10) as r1 
UNWIND r1 as r 
WITH r1, last(nodes(r)) as n 

MATCH r = (n)-[:I]-() 
WITH r1, apoc.coll.randomItems(collect(r), 10) as r2 
UNWIND r2 as r 
WITH r1, r2, last(nodes(r)) as n 

MATCH r = (n)-[:I]-() 
WITH r1, r2, apoc.coll.randomItems(collect(r), 10) as r3 
UNWIND r3 as r 
WITH r1, r2, r3, last(nodes(r)) as n 

MATCH r = (n)-[:I]-() 
WITH r1, r2, r3, apoc.coll.randomItems(collect(r), 10) as r4 
RETURN r1 + r2 + r3 + r4 
+0

아주 잘 작동하는 답변을 보내 주셔서 감사합니다. –