Neo4j 每个节点的最短路径

Neo4j 每个节点的最短路径,neo4j,cypher,Neo4j,Cypher,我想用一些道具找到一条到附近节点的最短路径。这一个有效: match (st:station {kind:'Small'}) with st limit 1 match p = ShortestPath((st) - [:installation|cable*1..25] - (st1:station ) ) where st1.kind IN ['Biggest', 'Bigger', 'Big'] AND ALL(idx in filter ( x IN relationships(p

我想用一些道具找到一条到附近节点的最短路径。这一个有效:

match (st:station {kind:'Small'})
with st limit 1 
match p =  ShortestPath((st) - [:installation|cable*1..25] - (st1:station )  )
where st1.kind IN ['Biggest', 'Bigger', 'Big'] AND ALL(idx in filter ( x IN relationships(p) WHERE type(x) = 'Connection') WHERE idx.switch= 'Closed')
with st, st1 
match p2 = ShortestPath((st) - [:installation|cable*1..25] - (st1) )
where ALL(idx in filter ( x IN relationships(p2) WHERE type(x) = 'Connection') WHERE idx.switch= 'Closed')
with st, p2 order by length(p2) limit 1 
with st, head(tail(filter ( x IN relationships(p2) WHERE type(x) = 'Connection'))) as vb
set vb.feeding='True', st.done='True' )
它找到Dijkstra SSSP最短路径forrest,我随后从中获取最短路径(通过使用固定端点执行多条最短路径确定)

当我省略第一个“限制1”时,查询将永远不会返回,也不会进行任何更新。使用限制2或3时,将更新找到的第一个节点,而不是其他节点


我错过了什么?有人吗?

这就是全部问题吗?因为没有
RETURN
子句,所以它看起来缺少了什么?此外,我建议您进行一些重构以加快查询速度,例如将
station.kind
更改为标签,如果在您的模型中有意义的话,还可以为
安装
电缆
关系指定方向。
1..25
将进行一次巨大的扫描,根据您算法要求的声音,您可能需要使用
unwind
来代替第一个
。但是我需要看到更多的查询…Dom,这就是整个查询。set子句负责返回。由于导入限制(具有拓扑结构的GIS系统),我有一个(站点)(安装)([connection]>(cable)<[connection])*(installation)(station)链,您可能会猜到,我正在为公用事业网络建模。)我尝试展开时,它会生成语法错误。我又回到了Dijkstra,因为它是更快的算法。对于固定的起始节点,大约需要1.5秒(10个电缆滚刀)。如果进行straignt扫描,则根本不会返回。在我看性能之前,我首先想看看它是否有效(例如,完成了1套以上)您是否可以发布原始的
展开
查询,以便我了解您正在尝试做什么?我的博士学位就在这一领域(从历史的角度来看,neo4j中的公用事业网络就是一个模型),我很想听到更多关于您的模型的信息,并尝试提供帮助和从中学习!Dom,对于特定节点,我使用匹配(st:station{number:123456})和st。。。。。。。。。。但我想为所有电台{kind:'Small'}运行它。我将“unwind st”替换为“st”,但它的意思是“预期收集,但得到节点”。网络是高度冗余的(中压配电),我只想选择一条功率流路径。我尝试了你的建议,将属性传播到标签,但实际上速度较慢。