首页 文章

使用密码查询在neo4j中获取连接图

提问于
浏览
1

我们如何修改密码查询,以便它可以为查询提供所有连接的图(意味着直接或间接相互连接的节点集和关系集) .

要么

我可以根据我的要求使用遍历框架吗?

用例是:我需要从neo4j获取所有连接的图形,并将其信息存储为"cluster"在其他数据库中 . 1 group of connected graph = 1 cluster . 我需要分离连接的图形,然后存储节点/关系的一些属性的聚合,并将其存储在其他数据库中 .

我正在使用REST与neo4j db进行交互 .

2 回答

  • 2

    虽然它不会很快 .

    Java中的专用算法将更快地收集数据 .

    Cypher的想法(可能有非常糟糕的复杂性,但尚未奏效):

    • 获取所有节点
      每个节点

    • 如果它连接到连接图的任何第一个节点(shortestPath),则跳过它,否则收集所有路径的所有端节点

    .

    MATCH (n) 
    WITH COLLECT(n) as nodes
    RETURN REDUCE(graphs = [], n in nodes | 
      case when 
        ANY (g in graphs WHERE shortestPath((n)-[*]-(head(g))) 
             then graphs 
             else graphs + [[p in (n)-[*0..]-() | nodes(p)[length(p)-1]]]
             end ))
    
  • 2

    @michael,我已经修改了一下你的查询 . 现在它适用于我的数据 . 我发布的变体每个连接组件只保留一个元素 . 如果一个人对组件的实际成员不感兴趣但仍希望能够检索每个组件的成员,这很方便 .

    @manish,我知道它已经晚了但是,也许你可以将组件代表存储在新数据库中,而不是所有成员中 .

    MATCH (n) 
    WITH COLLECT(n) as nodes
    RETURN REDUCE(graphs = [], n in nodes | 
      case when 
        ANY (g in graphs WHERE shortestPath( (n)-[*]-(g) ) ) 
        then graphs 
        else graphs + [n]
        end )
    

相关问题