我有带有Stop
(红色)和Connection
(绿色)节点的下图。
我想使用A
上的cost属性找到从C
到Connection
的最短路径。
我想避免使Connection
成为关系,因为我失去了CONTAINS
的Foo
关系。
我可以像这样匹配单跳
MATCH p=(:Stop {name:'A'})<-[:BEGINS_AT]-(:Connection)-[:ENDS_AT]->(:Stop {name:'B'}) RETURN p
但是这不适用于任意数量的Connection
,就像处理关系和[*]
时一样。
我也试图将关系简化为一个简单的例子,但是如果没有GDS,似乎无法做到这一点。
MATCH (s1:Stop)<-[:BEGINS_AT]-(c:Connection)-[:ENDS_AT]->(s2:Stop) RETURN id(s1) AS source, id(s2) AS target, c.cost AS cost
请注意,连接是单向的,因此不可能从C
到A
。
没有任何Neo4j插件可以做到这一点吗?
如果要计算加权最短路径,那么使用GDS甚至APOC插件是最简单的。您可能可以使用cypher创建最短的加权路径函数,但不会进行优化。我只能想到找到两个节点之间的所有路径并对权重求和。在下一步中,您将使用最小的权重之和来过滤路径。不过,这无法很好地扩展。
至于您问题的第二部分,我将需要更多信息,因为我不确定您到底想要什么。