在neo4j中以最短路径搜索访问关系属性

时间:2015-01-07 00:13:41

标签: neo4j

我是Neo4j的新手,我正在尝试构建一个小型示例应用程序:公共交通规划师。它看起来如下(显然是强烈简化的例子):

simplified example

每辆公共汽车(出行)的出发和到达时间存储为关系属性。我希望公共汽车在指定时间附近(或之后)离开,同时在出发后尽快到达(即不一定是最短但最快的路线)。

我在Cypher中进行了很多实验,但我无法做到这一点。有什么建议吗?

编辑:更新图

updated simplified example

1 个答案:

答案 0 :(得分:2)

要启用更简单的Cypher查询,您可以将图形模型更改为:

(:Trip)-[:LEG {start: 10, end: 20}]->(:Stop)-[:LEG {start: 30, end: 40}]->(:Stop) ...
                                        |                                    |
                                      [:AT]                                [:AT]
                                        |                                    |
                                        v                                    v
                                (Location {name: "Paris"})           (Location {name: "London"})

总而言之,每次旅行都包含一系列N腿和N圈。每个Stop都与一个Location相关,每个Leg都存储它的开始和结束时间。

使用上述模型,将返回以下查询:(a)在时间40或之后开始的最快旅程的路径,以及(b)该旅程的持续时间。

MATCH p=(t:Trip)-[legs:LEG*1..]->(s:Stop)-[:AT]->(loc:Location)
WHERE HEAD(legs).start >= 40 AND NOT (s)-[:LEG]->()
WITH p, LAST(legs).end - HEAD(legs).start AS duration
RETURN p, duration ORDER BY duration LIMIT 1;

Here is a console显示示例结果。