2015-11-04 72 views
1

我有可以發送一個或多個協議(TCP,UDP和FTP)並可以接收一個或多個協議的實體(例如A,B,C),如圖所示下面。Neo4j查找所有返回到同一節點的路徑

我想創建一個密碼查詢,它將查找從給定實體返回到同一實體的所有可能路徑,並根據跳數從最短路徑排序到最長路徑。

enter image description here

可在網上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) 

確保您單擊清除DB頂部欄第一

回答

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)包含實體和協議。

+1

您可以通過消除'WITH'子句並將緊接着的'RETURN'子句更改爲:'RETURN path,relations,length(path)/ 2-1 AS hops'來縮短查詢。 – cybersam

+0

謝謝,我已經更新了答案。 –

相關問題