例如,我想查询3个节点(A、B、C)之间的所有最短路径,这意味着我想查询:1. A和B之间的所有最短路径2. C和B之间的所有最短路径3. A和C之间的所有最短路径
但我只找到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((a)-[*]-(b)-[*]-(c)-[*]-(a))
我想在查询中得到a和b、b和c、c和a之间的所有最短路径
3条答案
按热度按时间cuxqih211#
你需要一个嵌套循环:
yyyllmsg2#
Neo4j没有提供
allShortestPaths
的多模式版本,而这正是您所需要的:您希望通过在第一个遍历的基础上同时执行第二个遍历来优化遍历,但没有现成的方法,它也不会执行第三个遍历。这是一个非常具体的用例。
您要么必须在Cypher中调用
allShortestPaths
n(n-1)* 次(针对 n 个节点),要么尝试使用Traversal框架在过程中自己在服务器端实现它。ttisahbt3#
这里是样本密码
更多信息请参见https://neo4j.com/developer/kb/all-shortest-paths-between-set-of-nodes/