neo4j - 查找超过2个节点之间的所有最短路径

时间:2016-08-23 02:27:46

标签: neo4j

例如,我想在3个节点(A,B,C)之间查询allShortestPaths,这意味着我想查询: 1. A和B之间的allShortestPaths 2. C和B之间的allShortestPaths 3. A和C之间的allShortestPaths

但我只找到allShortestPaths查询以获取两个节点之间的allShortestPaths。

如下:

MATCH (node1:E { eid:"a9c2f114-796f-4934-a2d0-04bb3345e1d2" }),
(node2:E { eid:"01968dd2-1ed6-472d-82e9-be7701036b3b" }), 
p = allShortestPaths((node1)-[*]-(node2))
RETURN p LIMIT 25

我想知道是否存在支持2个以上节点输入的allShortestPaths查询?

现在,要搜索3个节点,我必须调用“allShortestPaths”三次,如下所示:

MATCH (node1:E { eid:"b73ade90-dfa1-4b94-bd0f-c16fd93bd680" }),
(node2:E { eid:"ddb5c52d-7002-4ac7-87d5-0f727f2ab3e7" }),
(node3:E { eid:"0398b081-6676-4a91-856b-abbabaee5e70" }) , 
p = allShortestPaths((node1)-[*]-(node2)),
q = allShortestPaths((node3)-[*]-(node2)),
m = allShortestPaths((node3)-[*]-(node1))
RETURN p,q,m LIMIT 10

我想要做的是在任意数量的节点之间搜索allShortestPaths。

到目前为止,我打算编写用户定义的程序,但这会花费更多的时间。我想知道谁可以提供更好的建议。

我想在几个节点之间搜索allShortestPaths。 例如:allShortestPaths((a)-[*]-(b)-[*]-(c)-[*]-(a))
我想在查询中获取a和b,b和c,c之间的所有最短路径

2 个答案:

答案 0 :(得分:0)

您需要一个嵌套循环:

{{1}}

答案 1 :(得分:0)

Neo4j没有提供采用多种模式的allShortestPaths版本,这就是您想要的:

allShortestPaths((node1)-[*]-(node2), (node1)-[*]-(node3), (node2)-[*]-(node3))

您希望通过捎带在第一个上同时进行第二个来优化遍历,但是没有开箱即用的东西,并且它不会这样做第三个也是。这是一个非常具体的用例。

您必须在Cypher中调用allShortestPaths n *(n-1)次(对于 n 节点),或者尝试自己实现服务器 - 使用procedureTraversal framework旁边。