例如,我想在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之间的所有最短路径
答案 0 :(得分:0)
您需要一个嵌套循环:
{{1}}
答案 1 :(得分:0)
Neo4j没有提供采用多种模式的allShortestPaths
版本,这就是您想要的:
allShortestPaths((node1)-[*]-(node2), (node1)-[*]-(node3), (node2)-[*]-(node3))
您希望通过捎带在第一个上同时进行第二个来优化遍历,但是没有开箱即用的东西,并且它不会这样做第三个也是。这是一个非常具体的用例。
您必须在Cypher中调用allShortestPaths
n *(n-1)次(对于 n 节点),或者尝试自己实现服务器 - 使用procedure在Traversal framework旁边。