neo4j -查找两个以上节点之间的所有最短路径

yzxexxkh  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(190)

例如,我想查询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之间的所有最短路径

cuxqih21

cuxqih211#

你需要一个嵌套循环:

// Array of id
WITH ["b73ade90-dfa1-4b94-bd0f-c16fd93bd680",
      "ddb5c52d-7002-4ac7-87d5-0f727f2ab3e7",
      "0398b081-6676-4a91-856b-abbabaee5e70"] as IDS

UNWIND IDS as vid
   //  Looking for the desired nodes
   MATCH (N:E {id: vid})
WITH collect(N) as NS

// Nested loops
UNWIND RANGE(0, size(NS)-2) as i1
  UNWIND RANGE(i1+1, size(NS)-1) as i2

    WITH NS[i1] as N1, 
         NS[i2] as N2
    // Get paths
    MATCH ps = allShortestPaths((N1)-[*]-(N2))

RETURN ps
yyyllmsg

yyyllmsg2#

Neo4j没有提供allShortestPaths的多模式版本,而这正是您所需要的:

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

您希望通过在第一个遍历的基础上同时执行第二个遍历来优化遍历,但没有现成的方法,它也不会执行第三个遍历。这是一个非常具体的用例。
您要么必须在Cypher中调用allShortestPathsn(n-1)* 次(针对 n 个节点),要么尝试使用Traversal框架在过程中自己在服务器端实现它。

ttisahbt

ttisahbt3#

这里是样本密码

MATCH (n:Entity) where n.name IN {names}
WITH collect(n) as nodes
UNWIND nodes as n
UNWIND nodes as m
WITH * WHERE id(n) < id(m)
MATCH path = allShortestPaths( (n)-[*..4]-(m) )
RETURN path

更多信息请参见https://neo4j.com/developer/kb/all-shortest-paths-between-set-of-nodes/

相关问题