【问题标题】:Facing problem generating subgraph from original graph in neo4j and networkX面临从 Neo4j 和 networkX 中的原始图生成子图的问题
【发布时间】:2019-10-29 06:41:36
【问题描述】:

我正在尝试从原始图构建一个子图,场景如下

这里的节点 b 和 C 与节点 A 相连。我想要的输出是如果两个节点与一个公共节点相连,那么它们是相连的。如何使用 neo4j 或 networkX 解决这个问题?我的重点是用于密码查询的 neo4j,但它们也有 networkX 绑定。我正在使用 python 来开发这个解决方案。

【问题讨论】:

    标签: python neo4j networkx


    【解决方案1】:

    你有这样的想法吗?

    1。创建模型

    为了方便可能的进一步答案和解决方案,我记下了我的图表创建声明:

    CREATE
        (nodeA:Node {name:'Node A'}),
        (nodeB:Node {name:'Node B'}),
        (nodeC:Node {name:'Node C'}),
        (nodeD:Node {name:'Node D'}),
        (nodeE:Node {name:'Node E'}),
        (nodeF:Node {name:'Node F'}),
        (nodeA)-[:CONNECTED]->(nodeB),
        (nodeA)-[:CONNECTED]->(nodeC),
        (nodeC)-[:CONNECTED]->(nodeD),
        (nodeD)-[:CONNECTED]->(nodeE),
        (nodeD)-[:CONNECTED]->(nodeF);
    

    2。变体 I(不改变图形)

    2.1 解决方案

    MATCH
        path = (sourceNode:Node)<-[:CONNECTED]-(:Node)-[:CONNECTED]->(targetNode:Node)
    WHERE
        id(sourceNode)<id(targetNode)
    RETURN
        sourceNode, targetNode;
    

    第二行描述了两个节点之间有一个公共节点的模式,而第四行只过滤了一个方向的结果对。

    2.2 结果

    ╒═════════════════╤═════════════════╕
    │"sourceNode"     │"targetNode"     │
    ╞═════════════════╪═════════════════╡
    │{"name":"Node B"}│{"name":"Node C"}│
    ├─────────────────┼─────────────────┤
    │{"name":"Node E"}│{"name":"Node F"}│
    └─────────────────┴─────────────────┘
    

     

    3。变体 II(图形扩展)

    3.1 解决方案

    以下 Cypher 查询通过依赖节点之间的直接关系 (NEW_CONNECTED) 丰富您现有的图表。

    MATCH
        path = (sourceNode:Node)<-[:CONNECTED]-(:Node)-[:CONNECTED]->(targetNode:Node)
    WHERE
        id(sourceNode)<id(targetNode)
    MERGE 
        (sourceNode)<-[:NEW_CONNECTED]-(targetNode);
    

    3.2 结果

    【讨论】:

    • 感谢您的回答@ThirstForKnowledgwe。我需要变体,例如假设节点 C 中有很多记录,例如 c1 c2 ... Cn。如果 c1 和 c2 与公共节点 A 连接,那么我将创建一个单独的关系 c1 ---connected -- c2 。我不想在这里显示节点 A。当且仅当 c1 和 c2 与节点 A 具有共同关系时,我的期望输出将是 c1---connected--c2。供您参考,我的节点大小为 800 万,关系大小为 789000457。我有 240G 内存和 16 个核心我的云中的 CPU
    猜你喜欢
    • 2013-03-05
    • 2016-04-09
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多