Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
neo4j查找满足特定条件的所有路径_Neo4j_Cypher - Fatal编程技术网

neo4j查找满足特定条件的所有路径

neo4j查找满足特定条件的所有路径,neo4j,cypher,Neo4j,Cypher,我试图建立一个图形模型来解决一些连接时间问题。例如,我有下面的图表 F1,F2 F3 F4 STU B------->ST2------->ST3------->STU E 圣母大学B------>ST4------>ST5------>圣母大学E 圣卢布------->圣卢布 I型STU B、ST2、ST3、ST4、ST5、STU E as站(节点)。F1-F9作为flt节点。每个flt节点都有一个出发时间和到达时间。这种关系是相互联系的。同样在这种情况下,假设F2到

我试图建立一个图形模型来解决一些连接时间问题。例如,我有下面的图表

    F1,F2     F3     F4
STU B------->ST2------->ST3------->STU E

圣母大学B------>ST4------>ST5------>圣母大学E

圣卢布------->圣卢布


I型STU B、ST2、ST3、ST4、ST5、STU E as站(节点)。F1-F9作为flt节点。每个flt节点都有一个出发时间和到达时间。这种关系是相互联系的。同样在这种情况下,假设F2到达时间比F3出发时间短30分钟,F6比F7短30分钟。(表示连接无效)因此从ST_B到ST_E的有效路线应为F1-F3-F4、F5-F7-F8和F9。我试图用密码来解决这个问题,但没有成功。(可能是我建模错误)

我为节点添加了标签,以区分航班和站点。所有航班F1-F9均标有:航班,所有车站ST_B、ST_E和ST_2-ST_5均标有:车站

Match path=stb:Station-[:Connect*]->ste:Station
Where stb.name='ST_B' and ste.name='ST_E'
With filter(x in nodes(path) where x:Flight ) as flts
Where all ( i in Range(0,length(flts)-2) Where flts[i].arrvTime < flts[i+1].dptrTime)
Return extract(flt in flts | flt.name)
Match path=stb:Station-[:Connect*]->ste:Station
其中stb.name='ST\u B'和ste.name='ST\u E'
过滤器(x在节点(路径)中,其中x:航班)作为FLT
其中所有(范围(0,长度(flts)-2)中的i,其中flts[i]。arrvTime
  • “Match”和“Where”子句检索从ST_B到ST_E的所有路径
  • With子句检索路径上的所有飞行节点,并将它们传递给下一个Where子句
  • 下一个“Where”子句检查每个航班的到达时间和连接航班的起飞时间,以仅返回有效的航班组合
  • 最后一个“Return”子句返回构成有效航线的航班名称
    我为节点添加了标签,以区分航班和站点。所有航班F1-F9均标有:航班,所有车站ST_B、ST_E和ST_2-ST_5均标有:车站

    Match path=stb:Station-[:Connect*]->ste:Station
    Where stb.name='ST_B' and ste.name='ST_E'
    With filter(x in nodes(path) where x:Flight ) as flts
    Where all ( i in Range(0,length(flts)-2) Where flts[i].arrvTime < flts[i+1].dptrTime)
    Return extract(flt in flts | flt.name)
    
    Match path=stb:Station-[:Connect*]->ste:Station
    其中stb.name='ST\u B'和ste.name='ST\u E'
    过滤器(x在节点(路径)中,其中x:航班)作为FLT
    其中所有(范围(0,长度(flts)-2)中的i,其中flts[i]。arrvTime
  • “Match”和“Where”子句检索从ST_B到ST_E的所有路径
  • With子句检索路径上的所有飞行节点,并将它们传递给下一个Where子句
  • 下一个“Where”子句检查每个航班的到达时间和连接航班的起飞时间,以仅返回有效的航班组合
  • 最后一个“Return”子句返回构成有效航线的航班名称
    你能解释一下你的领域吗。没有人会知道ST、F1等在这里意味着什么。接下来,在console.neo4j.org中设置您的测试数据,并在此处“共享”链接(单击右上角的“共享”按钮)。这是指向控制台的链接,域由站点(ST_B、ST2、ST?等)和航班(F1-F9)组成,航班连接站点。我想找到所有有效的路线btw ST_B和ST_E。这是连接链接,为什么连接对F2无效?F2到达时间比F3出发时间(10:30am)多1100(11:00am),与F6和F7相同。你能解释一下你的域吗。没有人会知道ST、F1等在这里意味着什么。接下来,在console.neo4j.org中设置您的测试数据,并在此处“共享”链接(单击右上角的“共享”按钮)。这是指向控制台的链接,域由站点(ST_B、ST2、ST?等)和航班(F1-F9)组成,航班连接站点。我想找到所有有效的路线btw ST_B和ST_E。这是连接为什么连接对F2无效?F2到达时间比F3出发时间(10:30am)多1100(11:00am),与F6和F7相同。哇,现在我看到了密码的力量。我有一个更复杂的问题,我将尝试在这个问题上进行扩展。如果我自己解决不了,我会发出去。@Lisa+1。你能解释一下为什么用2而不是1减去长度吗?@Pangea。集合的索引范围是0到长度-1,因为我使用“I”和“I+1”作为索引来访问两个连续的航班,并且为了将索引保持在0~(长度-1)的范围内,必须满足(I+1)我添加了使用特定飞机的航班(一些有wifi,一些没有)如果我需要进一步过滤,只查看具有wifi的有效路由,那么密码查询是什么。如果模型错误,请告诉我。下面是扩展示例数据的链接。正确的返回值应该只有F5-F7-F8和F9,因为F1使用的是AC1,而AC1没有wifi。F1-F3-F4的路由已经消失。这是我发现使用Cypher很难实现的情况之一。这归结为选择一条路径的问题,该路径的节点需要进一步匹配另一个模式(flt-[:Use]->ac:Aircraft),并且该模式需要一个新的标识符“ac”来指定对属性的约束,例如“ac.wifi=1”。这对于Cypher是不可行的,因为在“Where”表达式中不能引入新的标识符。哇,现在我看到了Cypher的威力。我有一个更复杂的问题,我将尝试在这个问题上进行扩展。如果我自己解决不了,我会发出去。@Lisa+1。你能解释一下为什么用2而不是1减去长度吗?@Pangea。集合的索引范围是0到长度-1,因为我使用“I”和“I+1”作为索引来访问两个连续的航班,并且为了将索引保持在0~(长度-1)的范围内,必须满足(I+1)我添加了使用特定飞机的航班(一些有wifi,一些没有)如果我需要进一步过滤,只查看具有wifi的有效路由,那么密码查询是什么。如果模型错误,请告诉我。下面是扩展示例数据的链接。正确的返回值应该只有F5-F7-F8和F9,因为F1使用的是AC1,而AC1没有wifi。F1-F3-F4的路由已经消失。这是我发现使用Cypher很难实现的情况之一。归根结底,问题在于选择一条路径,该路径的节点需要进一步移动
    Match path=stb:Station-[:Connect*]->ste:Station
    Where stb.name='ST_B' and ste.name='ST_E'
    With filter(x in nodes(path) where x:Flight ) as flts
    Where all ( i in Range(0,length(flts)-2) Where flts[i].arrvTime < flts[i+1].dptrTime)
    Return extract(flt in flts | flt.name)