假设我的图表具有以下路径
System.Windows
假设具有下述属性的路径
(3)<--[IS_LOCATED_AT,9]--(8)--[CARRIES,77]-->(53)<--[CARRIES,76]--(7)--[IS_LOCATED_AT,8]-->(2)
(3)<--[IS_LOCATED_AT,9]--(8)--[BELONGS_TO,7]-->(1)<--[BELONGS_TO,6]--(7)--[IS_LOCATED_AT,8]-->(2)
(3)<--[IS_LOCATED_AT,9]--(8)--[BELONGS_TO,7]-->(55)<--[BELONGS_TO,61]--(7)--[IS_LOCATED_AT,8]-->(2)
(3)<--[IS_LOCATED_AT,9]--(8)--[CARRIES,77]-->(57)<--[CARRIES,75]--(7)--[IS_LOCATED_AT,8]-->(2)
假设如果我调用节点(3)和(2)之间的最短路径,则在调用下面提到的方法时,我得到以下输出。
假设当前输出为:
(53) node has the properties--{Name:A}
(1) node has properties--{Name:B}
(55) node has properties--{Name:C}
(57) node has properties-- {Name:D}
但我的要求是1)它应该在调用shortestpath api之前根据node属性过滤路径假设我的过滤器是{Name:D},这是上面提到的(57)节点的属性
然后我的输出应该如下所示,当下面提到的shortespath方法作为具有属性{Name:D}的节点(57)的下面路径时。
带过滤器的预期输出
(3)<--[IS_LOCATED_AT,9]--(8)--[BELONGS_TO,7]-->(1)<--[BELONGS_TO,6]--(7)--[IS_LOCATED_AT,8]-->(2)
(3)<--[IS_LOCATED_AT,9]--(8)--[BELONGS_TO,7]-->(55)<--[BELONGS_TO,61]--(7)--[IS_LOCATED_AT,8]-->(2)
我不想为此使用密码。任何人都可以帮助我。
(3)<--[IS_LOCATED_AT,9]--(8)--[CARRIES,77]-->(57)<--[CARRIES,75]--(7)--[IS_LOCATED_AT,8]-->(2)
答案 0 :(得分:1)
如果限制适用于路径上的至少一个节点(而不是每个节点),则上面的代码段将不起作用。这里适用的策略如下:
shortestPath.findAllPaths
而不过滤节点属性GraphAlgoFactory.pathsWithLength()
并询问长度为+ 1的路径(其中长度是步骤1中最短路径的长度)length=length+1
另一种方法是使用GraphDatabaseService.bidirectionalTraversalDescription()
并在碰撞评估器中应用属性检查。但我认为这种方法比上面概述的策略更复杂。