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

时间:2016-09-21 16:31:35

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

 MATCH paths=shortestpath((A:Place{Name:"US"})-[r:LOCATED_AT|CARRIES|BELONGS_TO*]-(B:Place{Name:"UK"}))
WHERE ANY (n IN nodes(paths)
       WHERE ("Endpoint" IN labels(n)
              AND (n.type="LSP Path Termination")) ) RETURN paths

(2) represents Source Node
(3) represents destination Node

以下假设是源节点和目标节点之间的SIMPLE路径

a)    (2)<--[LOCATED_AT,85]--(60)--[LOCATED_AT,83]-->(3)
b)    (2)<--[LOCATED_AT,85]--(61)--[CARRIES]<--(59)--[LOCATED_AT,83]-->(3)
c)    (2)<--[LOCATED_AT,85]--(61)--[RESIDES_ON]<--(59)--[LOCATED_AT,83]-->(3)
d)    (2)<--[LOCATED_AT,85]--(69)--[ATTACHED_TO]--(81)--[CARRIES]<--(59)--[LOCATED_AT,83]-->(3)
e)    (2)<--[LOCATED_AT,85]--(63)--[BELONGS_TO]--(55)-->[LOCATED_AT,83]-->(3)
f)    (2)<--[LOCATED_AT,85]--(63)--[CARRIES]--(55)-->[BELONGS_TO]<--(57)--[LOCATED_AT,83]-->(3)

我试图找到最短路径。观察到C和D路径被丢弃,因为它们具有RESIDES_ON和ATTACHED_TO关系,这些关系不是关系过滤器[r:LOCATED_AT|CARRIES|BELONGS_TO*]的一部分。是真的吗?如果是,我想考虑C和D也被视为最短路径过滤过程的一部分,因为它们具有作为关系过滤器一部分的LOCATED_AT和CARRIES关系。这是有效的情况吗?

据我所知,r:LOCATED_AT|CARRIES|BELONGS_TO*的管道符号应考虑下面提到的关系组合。下面的关系组合场景需要考虑路径是否具有它们。因此,最短路径会考虑这些路径并找到最短路径关系过滤器:::[r:LOCATED_AT|CARRIES|BELONGS_TO*]

   1)LOCATED_AT
   2)CARRIES
   3)BELONGS_TO
   4)LOCATED_AT|CARRIES|BELONGS_TO
   5)LOCATED_AT,CARRIES
   6)LOCATED_AT,BELONGS_TO
   7)CARRIES,BELONGS_TO

请注意,如果上述关系组合中的任何一个匹配且路径可能具有除上述之外的其他关系,则应考虑路径以查找最短路径。

0 个答案:

没有答案