从可变长度路径生成neo4j中的边缘列表

时间:2018-05-30 16:31:42

标签: neo4j cypher

我正在尝试生成一个边缘列表,以读入R数据帧,以便在vizNetwork包中使用。这必须以其最简单的格式,作为一个包含2列的表,"来自"和"到"。

the neo4j console中,弹出的默认查询几乎说明了我尝试运行的查询类型,指定了一个起始点,然后生成的链是我感兴趣的图。

运行的查询是match (n:Crew)-[r:KNOWS*]-(m) where n.name='Neo' return n as Neo,r,m,这将返回一个显示关系链的图表以及我在下面包含的表格。

Neo                   r                                                            m
(0:Crew {name:"Neo"}) [(0)-[0:KNOWS]->(1)]                                         (1:Crew {name:"Morpheus"})
(0:Crew {name:"Neo"}) [(0)-[0:KNOWS]->(1), (1)-[2:KNOWS]->(2)]                     (2:Crew {name:"Trinity"})
(0:Crew {name:"Neo"}) [(0)-[0:KNOWS]->(1), (1)-[3:KNOWS]->(3)]                     (3:Crew:Matrix {name:"Cypher"})
(0:Crew {name:"Neo"}) [(0)-[0:KNOWS]->(1), (1)-[3:KNOWS]->(3), (3)-[4:KNOWS]->(4)] (4:Matrix {name:"Agent Smith"})

桌子并没有包含一个非常前卫的边缘。格式。如何使关系图以下列格式返回结果...

from         to
Neo          Morpheus
Morpheus     Trinity
Morpheus     Cypher
Cypher       Agent Smith

Nicole White写了a guide on integrating rneo4j and vizNetwork,但这依赖于首先生成节点列表,然后将结果列表的id作为边列表查询中的参数引用。我希望能够获得一个纯粹的密码"如果可能的话。

1 个答案:

答案 0 :(得分:2)

您要返回的每一行是1条边。因此,要获得所需的回报,只需匹配边缘,Neo4j将为该模式的每个有效出现创建一行。

MATCH (from)-[:KNOWS]->(to)
RETURN from.name as from, to.name as to

您可以使用WHERE模式匹配来过滤它,如此

MATCH (from)-[:KNOWS]->(to)
WHERE (:Person {name:"Neo"})-[:KNOWS*..25]->(from)
RETURN from.name as from, to.name as to