我有实体(例如A,B,C)可以发送一个或多个协议(TCP,UDP和FTP),并且可以接收一个或多个协议,如下图所示。
我想创建一个cypher查询,它将查找从给定实体返回同一实体的所有可能路径,从最短路径到最长路径排序,基于跳数。
可以使用以下创建脚本在neo4j Console在线进行测试:
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)
确保首先单击顶部栏中的“清除数据库”
答案 0 :(得分:1)
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)
包含实体和协议。