我需要从一组起始节点到一组终止节点的最短路径(基于重量)。为什么要使用spanningTree的另一个重要要求是需要分别对待源节点和目标节点(采用一个起始节点并构建到终止节点的路径集,然后采用另一个起始节点并执行相同的操作)并仅访问单个节点一次避免重复。
这是spanningTree的示例代码:
CALL
apoc.load.json("file:///..........")
YIELD value UNWIND value.origin AS orig
MATCH(origin:concept{name:orig.label}) WITH value, collect(origin) as origins
UNWIND value.target AS tar MATCH(target:concept{name:tar.label})
UNWIND origins AS origin WITH origin, target
CALL apoc.path.spanningTree(origin, {terminatorNodes:[target], maxLevel:5, limit:3})
但是,在进入路径之前,我需要设置一个条件,即需要通过权重之和定义的确切路径,例如:
path=((origin)-[rels:link*]-(target)) reduce(weight=0, rel in rels | weight + rel.Weight)
我知道apoc.path.spanningTree的起源,没有选择权重的选择:
call apoc.path.spanningTree(startNode <id>Node/list, {maxLevel,
relationshipFilter, labelFilter, bfs:true, filterStartNode:true, limit,
optional:false, endNodes, terminatorNodes, sequence, beginSequenceAtStart:true})
yield path
重要,我不需要以下情况:
length(path)
因此,我需要为每个起始节点获得几个路径建议,这些路径建议的特征是权重,而不是起点和终点之间的跳数。
如果没有办法将spanningTree与加权链接/关系组合在一起,那么您可能会建议我这种情况下的另一种解决方法。预先谢谢你!