我有实体(例如A、B、C),它们可以发送一个或多个协议(TCP、UDP和FTP),并且可以接收一个或多个协议,如下图所示。
我想要创建一个密码查询,它将找到从给定实体返回到同一个实体的所有可能路径,根据跳数排序从最短路径到最长路径。

可以在neo4j控制台上使用以下创建脚本进行在线测试:
create (a:Entity {name:'A'}),
(b:Entity {name: 'B'}),
(c:Entity {name: 'C'}),
(d:Entity {name: 'D'}),
(tcp:Protocol {name: 'TCP'}),
(ftp:Protocol {name: 'FTP'}),
(udp:Protocol {name: 'UDP'}),
(a)-[:SEND]->(tcp), (tcp)-[:SEND]->(b), (tcp)-[:SEND]->(d), (b)-[:SEND]->(ftp), (ftp)-[:SEND]->(c), (ftp)-[:SEND]->(d),
(d)-[:SEND]->(udp), (c)-[:SEND]->(udp), (udp)-[:SEND]->(a)请确保首先单击顶部栏上的“清除数据库”。
发布于 2015-11-04 23:20:55
MATCH path=(source { name:'A' })-[r*4..10]-> source
RETURN path, length(path)/2-1 AS hops
ORDER BY hops解释:
{ name:'A' } -用于标识源节点
[4..10] -用于指定最小和最大跳数(包括)。在这种情况下,不可能低于4跳,因为最小跳数是4:
实体->协议->实体->协议->实体
length(path)/2-1 AS hops -计算路径中存在多少实体跳。注意,length(path)包含实体和协议。
https://stackoverflow.com/questions/33533977
复制相似问题