使用关系过滤器的最短路径

时间:2016-09-20 17:20:20

标签: neo4j spring-data-neo4j-4 neo4j-ogm

  MATCH PATHS=shortestpath((a:Place{Name:"Mysore"})-
       [r:IS_LOCATED_AT|CARRIES|BELONGS_TO*]-(b:Place{Name:"Bangalore"})) 
  WHERE  ANY ( n IN nodes(PATHS) 
       WHERE
     ("Network" IN labels(n) or n.Name='mplscore.net' AND  n.Name="IP_MPLS_Layer-11")
           OR
      ("Equipment" IN labels(n) or n.Name='Chassis111'))

      RETURN a,r,b

调用最短路径方法时

1) 首先提到关系过滤器[r:IS_LOCATED_AT | CARRIES | BELONGS_TO *],它正在归档所有具有IS_LOCATED_AT,CARRIES,BELONGS_TO的路径。观察到路径有IS_LOCATED_AT,CARRIES,BELONGS_TO(所有这三个关系应该在路径中)关系只考虑文件。

观察到丢弃了具有BELOW关系过滤器组合的路径。我们需要澄清他们放弃的原因

   a)CARRIES,IS_LOCATED_AT
   b)BELONGS_TO,IS_LOCATED_AT
   c)BELONGS_TO,CARRIES
   d)IS_LOCATED_AT
   e)CARRIES
   f)BELONGS_TO

2) 在过滤后的路径中,它给出了最短的路径。

任何人都可以详细说明上面提到的关系组合为什么不考虑寻找最短路径。如果有人提供详细说明,我会很高兴

提前致谢

1 个答案:

答案 0 :(得分:1)

潜在原因1:如果路径af不符合您的WHERE条款,则SHORTESTPATH会忽略它们。

潜在原因2:WHERE子句有逻辑错误。这个片段:

n.Name='mplscore.net' AND  n.Name="IP_MPLS_Layer-11"

将始终评估为FALSE,因为节点的Name属性不能同时具有2个值。因此,您的WHERE子句在逻辑上会缩减为以下内容:

"Network" IN labels(n) OR "Equipment" IN labels(n) OR n.Name='Chassis111'