2013-05-27 71 views
0

我是neo4j的新手,非常感謝您對此的幫助。Cypher查詢以檢查節點連接

我在neo4j中創建了以下圖形。

N1 N2 ---- ---- ---- N3 N4 N5 ---

N1,N2,N3,N4,N5都是節點 ---:relationship_type_1(REL)

現在給出了任何一組節點(以任何順序),我想檢查這些節點是否連接。 例如給定n1,n2,n3 ==>連接。 給定n1,n3,n2,n4,n5 ==>已連接。

我應該如何制定我的密碼查詢來檢查連接性?

下面的查詢,如果我更改順序工作,甚至,

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
    WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p); 

http://console.neo4j.org/?id=xl8pnl

,但如果我提供的開始節點,而不是使用_1,_2和更改訂單,則它不會返回我的路徑。 :(

http://console.neo4j.org/?id=xl8pnl 爲下面的查詢,

START p1=node(6),p2=node(5),p3=node(4) MATCH p=p1--p2--p3 
WHERE p1.name?="Node1" AND ALL (n IN nodes(p) WHERE n.name IN ['Node1' ,'Node3', 'Node2' , 'Node4']) 
RETURN nodes(p) 

作爲節點連接在節點(6)-node(5)-node(4)爲了不返回的路徑。

+0

列出構成「連通」給您即時的不同模式執行節點必須直接連接,或者在節點在允許的範圍內(找到的路徑可以大於節點集,例如n1,n3,n5 - > n1 ---- n2 ---- n3 ---- n4 --- n5 =連接)? –

+0

HI, 節點應直接連接。 例如給定,n1,n3,n5應導致==>未連接。 – sbhatt

回答

2

您需要通過明確列出他們像 console.neo4j.org/r/2w3poz

START p1=node(0),p2=node(4),p3=node(5) 
RETURN 
    CASE 
    WHEN p1--p2--p3 OR p2--p1--p3 OR p1--p3--p2 OR p3--p2--p1 OR p3--p1--p2 
    THEN 'Connected' 
    ELSE 'Not connected' 
    END 
2

案例1:

2路徑中找到

MATCH p=_1--_2--_3--_4 
WHERE _1.name?="Node1" and 
    ALL (n in nodes(p) 
    WHERE n.name IN ["Node1", "Node2", "Node3", "Node4"]) 
RETURN nodes(p); 

看看這裏:

http://console.neo4j.org/?id=nn9yl6在這種情況下,爲了 事這麼想的


案例2

(沒有路徑發現)

使用節點1,2,4

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
    WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p); 

看看這裏:

http://console.neo4j.org/?id=xl8pnl

+0

只是一個小的快速跟進問題。這些節點每次都按順序返回嗎? 例如 MATCH p = _1 - _ 2 - _ 3 - _ 4 WHERE _1.name?="Node1「and ALL(n in nodes(p) WHERE n.name IN [」Node1「,」Node2「,」節點3「,」節點4「]) RETURN節點(p); (6:節點{名稱:「節點1」}),(5:節點{名稱:「節點2」}),(4:節點{名稱:「節點3」}),(3:節點{ name:「Node4」}) 它會每次都以這個順序返回節點嗎? (按順序連接) – sbhatt

+0

它們將按照'p'的順序出現,因此每次根據路徑都是一樣的。 – p3rnilla

+0

太好了!非常感謝! :-) – sbhatt