使用cypher(Neo4j)获取特定路径作为输出

时间:2017-08-30 12:26:13

标签: neo4j cypher

我有一个图形网络,如下所示

enter image description here

我想要的是“仅”获得节点1和节点4之间的最长路径。我已经为它编写了如下查询:

MATCH p = ((n {name: '1'})-[:Relation*..]-(n1{name: '4'}))
WITH max(length(p)) AS pathLength
MATCH p1 = ((n {name: '1'})-[:Relation*..]-(n1{name: '4'}))
WHERE length(p1) = pathLength
RETURN p1

但是,查询返回节点之间的所有关系(上面的图像实际上是查询的结果)是路径的一部分,有什么办法可以避免吗?

Neo4j的新手,我们将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

您正在使用pathLengthn之间所有可能路径的n1。尝试订购并限制pathLength

MATCH p = ((n {name: '1'})-[:Relation*..]-(n1{name: '4'}))
WITH length(p) AS pathLength
ORDER BY pathLength DESC // greater path lengths first
LIMIT 1 // get only the greatest
MATCH p1 = ((n {name: '1'})-[:Relation*..]-(n1{name: '4'}))
WHERE length(p1) = pathLength
RETURN p1

修改

  

另外,尝试在where条件中提供静态值(3)。   似乎没有任何改变。

可能会启用Neo4j浏览器的“连接结果节点”选项。启用此选项后,Neo4j浏览器将尝试在图形可视化模式下连接结果节点。要禁用它要获得所需的结果,您应该转到Neo4j浏览器设置的“图形可视化”部分,取消选中“连接结果节点”选项,如下图所示:

Graph visualization settings

“额外”关系仅在图表可视化模式中显示。如果更改为表格,文本或代码,则不会显示这些关系。