![](/img/trans.png)
[英]Dijkstra algorithm to find shortest path between two nodes in big graph?
[英]Redisgraph find shortest path between 2 nodes
我是使用图形技术的新手。 以下是我拥有的一个示例数据,我想将其放入 redis 图中并找到 2 点之间的最短距离。
{"Entry":{"Reception":152},"Reception":{"Corner":176,"Exit":153},"Corner":{"Gate":41,"Reception":176},"门":{"LiftLobby":53,"Corner":41},"LiftLobby":{"门":53}}
例如,在此 json object 中,入口点和接收点之间的距离为 152 个单位。 我应该使用哪些 redisgraph 查询
如果我正确理解您的问题,我将在 RedisGraph 中使用 model 这个数据:
name
属性的Loc
实体:Entry、Reception、Corner、Exit、Gate、LiftLobydist
属性的实体对之间创建Way
关系要找到两个地方之间的最短路径 - 使用 RedisGraph 2.10 algo.SPpaths
过程(请参阅此处的“单对最小权重有界成本有界长度路径”)。
创建图表:
GRAPH.QUERY g "CREATE (e:Loc{name:'Entry'}), (r:Loc{name:'Reception'}), (c:Loc{name:'Corner'}), (x:Loc{name:'Exit'}), (g:Loc{name:'Gate'}), (l:Loc{name:'LiftLobby'}), (e)-[:Way{dist:152}]->(r), (r)-[:Way{dist:176}]->(c), (r)-[:Way{dist:153}]->(x), (c)-[:Way{dist:41}]->(g), (c)-[:Way{dist:176}]->(r), (g)-[:Way{dist:53}]->(l), (g)-[:Way{dist:41}]->(c), (l)-[:Way{dist:53}]->(g)"
1) 1) "Labels added: 1"
2) "Nodes created: 6"
3) "Properties set: 14"
4) "Relationships created: 8"
5) "Cached execution: 0"
6) "Query internal execution time: 0.788600 milliseconds"
查询Entry和Gate之间的最短路径:
GRAPH.QUERY g "MATCH (e:Loc{name:'Entry'}), (g:Loc{name:'Gate'}) CALL algo.SPpaths( {sourceNode: e, targetNode: g, relTypes: ['Way'], weightProp: 'dist'} ) YIELD path, pathWeight RETURN pathWeight, [n in nodes(path) | n.name] as pathNodes ORDER BY pathWeight"
1) 1) "pathWeight"
2) "pathNodes"
2) 1) 1) "369"
2) "[Entry, Reception, Corner, Gate]"
3) 1) "Cached execution: 0"
2) "Query internal execution time: 0.540100 milliseconds"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.