neo4j总线路由的数据模型和遍历方法

neo4j总线路由的数据模型和遍历方法,neo4j,routing,graph-databases,Neo4j,Routing,Graph Databases,我正在尝试创建一个应用程序,以便在本地城市乘坐公交车时找到最佳路径。到目前为止,我已经在这里找到了一些有用的答案,但我目前正在努力尝试我的方法,我希望得到一些反馈 当前数据模型 有站点和阶段被建模为节点,站点和站点之间有两种关系。每个阶段节点都有一个开始和一个结束时间,作为“HH:mm”格式的字符串,属于我称之为路线的某个更高层结构,这些路线连接到这些阶段节点,以描述沿站点的轨迹和时间细节。每个:FROM关系都有一个属性duration,用于为reduce语句建模旅行时间 因此,下面的查询将返回

我正在尝试创建一个应用程序,以便在本地城市乘坐公交车时找到最佳路径。到目前为止,我已经在这里找到了一些有用的答案,但我目前正在努力尝试我的方法,我希望得到一些反馈

当前数据模型

站点阶段被建模为节点,站点和站点之间有两种关系。每个阶段节点都有一个开始和一个结束时间,作为“HH:mm”格式的字符串,属于我称之为路线的某个更高层结构,这些路线连接到这些阶段节点,以描述沿站点的轨迹和时间细节。每个:FROM关系都有一个属性duration,用于为reduce语句建模旅行时间

因此,下面的查询将返回如下内容。阶段节点在图片中显示开始属性

match (from:Station {name: "Glosberg"})
match (to:Station {name: "Knellendorf"})
match paths=((from)-[:FROM|:TO*..10]->(to))
return paths;
目前存在的问题:

  • 最短路径/所有最短路径都不是有效选项,因为最小跳数并不意味着最佳路径。我想要的是缩短旅行时间,我可以通过Reduce语句来实现,我已经这样做了。因为我必须检查所有路径,所以我使用的是有限制的通用模式匹配器(如上所示)。我在查询中使用的限制实际上是之间的最短路径的长度加上10%左右,以包括可能包含更多跳数但花费较少时间的路径。这不一定准确,但似乎是一个公平的权衡
  • 使用dijkstra可以提供从AB的所有路径。由于stage节点上有一种形式的时间数据,因此大多数路径都没有意义,因为它们要么按相反的顺序组合(2pm->1pm),要么产生较长的等待时间(2pm->4pm),这是不必要的。因此,我必须过滤掉坏路径,无论是在cypher中还是在某些api级别。然而,对于当前的数据模型,有太多的路径需要检查有效性。有了一些示例数据,也可以在生产中运行,我有一条路线,每天访问24个站点2次,得到2^23条路径。我很确定我的数据模型是个问题,但我看不到任何解决方法;有什么想法吗
  • 问题:

  • 更多的是一个次要问题:对于超过0am的阶段,您将如何解决排序路径?因为“23:59”大于“00:01”,但不是按时间顺序
  • 您会对数据模型做哪些更改
  • 您是否建议在路径查找如何工作以降低复杂性方面进行权衡(例如,仅使用最短路径)
  • 您是否建议将实际路线数据(时刻表、谁在哪里和何时停车)与基础设施数据(车站以及哪些车站靠近哪些车站)分开?这样,我就必须使用neo4j找到一条路径/一组要行驶的车站,然后尝试从时间表中找到一组合适的元素,类似于
  • 我已经读到,traversal api是一种更好的描述如何访问图形的方法,而不是使用cypher,cypher只描述要查找的内容,但是在深入研究之前,我希望收到关于我想法的反馈