2017-12-08 13 views
0

Neo4jで作成された大きなグラフデータベースで、2種類の関係 "E"と "I"があります。
開始ノードn0で2つのグラフを抽出します。 最初のグラフ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

この回答は非常にうまくいきました。 –