【问题标题】:neo4j: extraction of random graphsneo4j:随机图的提取
【发布时间】:2017-12-08 07:55:37
【问题描述】:

我们有一个用Neo4j 制作的大型图形数据库,它有两种类型的关系“E”和“I”。
我们想从中提取两个图,其起始节点称为 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

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

感谢您的帮助。

【问题讨论】:

    标签: graph neo4j extraction random-access


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢这个非常有效的答案!
    猜你喜欢
    • 2012-08-13
    • 2013-04-12
    • 1970-01-01
    • 2012-05-02
    • 2015-01-02
    • 2015-12-11
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多