2012-03-31 98 views
2

交朋友的朋友很容易,我看到這似乎很好。如何獲得有相同興趣的朋友的朋友?

g.v(1).in('FRIEND').in('FRIEND').filter{it != g.v(1)} 

但我想要做的只是得到的具有相同興趣的朋友的朋友。在下面,我希望Joe被提議Moe,但不是Noe,因爲他們沒有相同的興趣。

Drawing of graph

回答

3

你只需要擴展你的小鬼穿越走了過來喜歡邊太:

g.v(1).in('FRIEND').in('FRIEND').filter{it != g.v(1)}.dedup() \ 
     as('friend').in('LIKES').out('LIKES').filter{it == g.v(1)}. \ 
     back('friend').dedup() 

基本上,這出去的朋友的朋友,當你之前已經在friend的名稱下保存了管道中的位置。然後出去互相喜歡並搜索原始的 源節點。如果它找到一個,它會跳回frienddedup()只是刪除重複項,並可能加快遍歷。

這可能不是100%正確的,因爲您沒有指出圖中邊的方向。

+0

對不起,我忘了添加箭頭,這會有所幫助。在我的模型中,FRIEND是雙向的,LIKE以用戶節點開始並以語言一結束。 ('FRIEND')。filter {it!= gv(1)}。dedup()。as('fof')。out('LIKES') ).in('LIKES')。filter {it == gv(1)}。back('fof')。dedup() – rball 2012-04-02 20:54:22

2

這是否必須在小鬼?如果Cypher支架是可以接受的,你可以這樣做:

START s=node(Joe) 
MATCH s-[:FRIEND]-()-[:FRIEND]-fof, s-[:LIKES]-()-[:LIKES]-fof 
WHERE s != fof 
RETURN fof 
+0

我正在使用neo4jClient,所以我可以試試這個,如果我不能讓另一個工作。謝謝 – rball 2012-04-01 00:02:56

相關問題