首页 > 解决方案 > 从可变长度路径生成neo4j中的边列表

问题描述

我正在尝试生成要读入 R 数据帧以在 vizNetwork 包中使用的边列表。这必须以最简单的格式作为具有 2 列“从”和“到”的表格。

neo4j 控制台中,弹出的默认查询几乎说明了我尝试运行的查询类型,其中指定了起点,然后生成的链就是我感兴趣的图。

运行的查询是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 编写了关于集成 rneo4j 和 vizNetwork 的指南,但这依赖于首先生成节点列表,然后将结果列表的 id 作为边缘列表查询中的参数引用。如果可能的话,我希望实现一种“纯密码”方法。

标签: neo4jcypher

解决方案


您要返回的每一行都是 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

推荐阅读