将APOC spanningTree与加权路径相结合

时间:2019-04-19 16:01:56

标签: neo4j cypher neo4j-apoc

我需要从一组起始节点到一组终止节点的最短路径(基于重量)。为什么要使用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与加权链接​​/关系组合在一起,那么您可能会建议我这种情况下的另一种解决方法。预先谢谢你!

0 个答案:

没有答案