0 我必须找到一个子网到另一个子网之间的 APSP

问题描述 投票:0回答:1

例如,在我的情况下,应该有从 sub2 到 sub6、sub2 到 sub8、sub2 到 tgw2 等的路径。但我没有得到任何这些路径。

我的数据:

CREATE 
(s1:Subnet{name:"sub1"}),
(s2:Subnet{name:"sub2"}),
(s3:Subnet{name:"sub3"}),
(s4:Subnet{name:"sub4"}),
(n1:Network{name:"net1"}),
(s1)-[:SUB_OF]-> (n1),
(s3)-[:SUB_OF]-> (n1),
(s2)-[:SUB_OF]-> (n1),
(s4)-[:SUB_OF]-> (n1),
(s5:Subnet{name:"sub5"}),
(s6:Subnet{name:"sub6"}),
(s7:Subnet{name:"sub7"}),
(s8:Subnet{name:"sub8"}),
(n2:Network{name:"net2"}),
(t1:TGW{name:"tgw1"}),
(t2:TGW{name:"tgw2"}),
(s5)-[:SUB_OF]-> (n2),
(s6)-[:SUB_OF]-> (n2),
(s7)-[:SUB_OF]-> (n2),
(s8)-[:SUB_OF]-> (n2),
(s5)-[:CONNECT_TO]->(t1),
(s3)-[:CONNECT_TO]->(t1),
(s4)-[:CONNECT_TO]->(t2),
(s8)-[:CONNECT_TO]->(t2);

我的预测是:

MATCH (src:Subnet)-[r:SUB_OF | CONNECT_TO]->(trg:Network|TGW)
RETURN gds.graph.project(
  'cypherGraph10',
  src,
  trg,
  {relationshipType: type(r)},
  {undirectedRelationshipTypes: [type(r)]
})

尝试此操作后,我没有得到所有的答案:

CALL gds.allShortestPaths.stream('cypherGraph10') YIELD sourceNodeId, targetNodeId, distance
WHERE gds.util.isFinite(distance) AND sourceNodeId <> targetNodeId
WITH gds.util.asNode(sourceNodeId) AS source, gds.util.asNode(targetNodeId) AS target, distance
WHERE NONE(n IN [source, target] WHERE n:Network|TGW)
RETURN source.name AS source, target.name AS target, distance
ORDER BY distance DESC, source ASC, target ASC
graph neo4j cypher graph-data-science
1个回答
0
投票

您的投影查询有缺陷。

MATCH
子句不允许在投影中捕获所有关系。

您原来的

MATCH
条款:

MATCH (src:Subnet)-[r:SUB_OF | CONNECT_TO]->(trg:Network|TGW)
修复选项 1:
MATCH (src:Subnet|TGW)-[r:SUB_OF | CONNECT_TO]->(trg:Subnet|Network|TGW)
修复选项 2(如果模式无法捕获不需要的关系):
MATCH (src)-[r:SUB_OF | CONNECT_TO]->(trg)
© www.soinside.com 2019 - 2024. All rights reserved.