neo4j:随机图的提取

时间:2017-12-08 07:55:38

标签: graph neo4j extraction random-access

我们有一个由Neo4j制作的大图数据库,它有两种类型的关系" E"和"我"。
我们想用一个名为n0的起始节点从中提取两个图。 必须随机获取基于Gxi关系的第一个图"I"。 以下请求是错误的,但这是我们想要实现的想法。这里为最后一步的每个节点随机选择了10个邻居

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

然后我们想根据关系Gxe"E"的节点创建第二个图Gxi

感谢您的帮助。

1 个答案:

答案 0 :(得分: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