全源最短路径算法未找到子网间部分路径的问题排查求助
全源最短路径算法未找到子网间部分路径的问题排查求助
大家好,我最近在使用Neo4j的GDS库做全源最短路径查询时遇到了问题,希望能得到社区大佬的帮助。
我需要找出所有子网(Subnet)之间的可达路径,比如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
按照我的预期,sub2应该能通过net1 -> sub3 -> tgw1 -> sub5 -> net2 -> sub6这样的路径和sub6连通,也能找到到tgw2的路径,但目前查询结果里完全没有这些内容。
有没有朋友能帮我排查下问题?是图投影的方式有遗漏,还是查询语句的过滤条件出了问题?
备注:内容来源于stack exchange,提问作者Sur
相关产品推荐
相关产品推荐

