2013-12-20 71 views
3

我是新來的Neo4j和CYPHER語言對我是如此裸露查找節點之間的路徑...通過暗號

我創建了一個應用程序中的填充與電子郵件記錄的Neo4j的數據庫。我創建了2種類型的節點,人員&郵件和我創建了4種類型的關係,發送cc到& reply_of。

現在我想找到兩個不直接連接的節點之間的關係。例如在P1 & P3之間(見圖片)。

我怎樣才能通過密碼實現這一目標?在neo4j中可行嗎?

親切的問候, 馬亭

Relationship between persons & mails

更新問題:

首先讓我清楚一些有關的圖片...

的Reply_OF關係是郵件節點之間的關係。它創建了原始郵件和任何轉發郵件的回覆之間的關係。已發送,要Cc & Bcc關係在個人節點和郵件節點之間創建關係。人節點之間沒有直接的關係。

提交這個問題和閱讀答案讓我意識到我想知道別的什麼......我真正想知道的是如何顯示所有已經看到回覆或轉發來自原始郵件的郵件的人員節點即不在原始郵件中的收件人,抄送或密件抄送列表中。

回答

1

回答到更新的問題:

我假設你的電子郵件節點攜帶的Email標籤並有財產mailId

MATCH (mailToTrack:Email {mailId: 'mymailid'})-[:Reply_Of*1..100]->()-[:TO|:CC|:BCC]->(person) 
RETURN distinct person 
+0

Tnx Stefan!它的作用像魅力! – Martijn

+0

我在'MATCH a =(first:IfcNode {nid:587}) - [:RELTYPE * 1..2] - >() - [:RELTYPE] - >(other)上得到'未知變量UNNAMED35'返回截然不同的其他;'。如果我刪除'* 1..100',它可以工作,但當然只能一跳。在Neo4j 3.2.0上 –

2

用Neo4j術語,你想找到P1和P3之間的路徑。關係只是連接兩個鄰居。

我假設P節點攜帶Person標籤,並具有name屬性。

MATCH p=(p1:Person {name:'P1'})-[:SENT|:TO|:CC|:BCC*1..20]->(p3:Person {name:'P3'}) 
RETURN p 

在很多情況下,你有興趣在它們之間的最短路徑:

MATCH p=shortestPath(p1:Person {name:'P1'})-[:SENT|:TO|:CC|:BCC*1..20]->(p3:Person {name:'P3'}) 
RETURN p 
+0

這種關係應該是沒有方向性的,否則,這是行得通的。 –

+0

@Stefan感謝您的回答。這不是我之後的最短路徑,我想找到兩個或更多節點之間的所有通信。 – Martijn

+0

@Josh在這種情況下,你指什麼無方向? – Martijn