Cypher查询返回具有特定关系类型的路径

时间:2017-06-21 13:23:19

标签: neo4j path cypher graph-databases

我已经设置了一个Neo4j Graph DB。

我有以下节点和关系类型:

Left panel - Database Information

我的问题是如何通过关系类型“BUS”获取Station中两个节点之间的路径?

Station(1)->BUS->Station(31)

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用这样的简单Cypher查询:

MATCH p = (:Station {id:1})-[:BUS*]->(:Station {id:31})
RETURN p

此查询将MATCH p(:Station{id:1})之间的路径((:Station {id:31}))仅跟随:BUS类型的任意长度的关系(由{表示)在关系类型之后{1}}。

您还可以指定查询将遵循的跃点数,将其放在*之后(例如:[:BUS * 1..3]将至少跟随1和最多3个跃点)。请查看MATCH clause docs

修改

来自汉斯评论:

  

我对最短的路径感兴趣

您可以使用shortestPath()功能。这样:

*

来自文档:

  

适用于最短路径的 WHERE 子句中使用的谓词   在确定最短匹配路径之前评估模式   是

上述查询将返回MATCH (a:Station {id:1}), (b:Station {id:31}), p = shortestPath((a)-[*]-(b)) WHERE ALL (r IN relationships(p) WHERE type(r) = 'BUS') RETURN p a仅评估b关系的最短路径。