2013-07-18 31 views
0

我在neo4j中創建了5個節點,如下所示。neo4j - 用互相計數的用戶建議

Node 1 {userid:1000, username: A, someOtherProperties...} 
Node 2 {userid:2000, username: B, someOtherProperties...} 
Node 3 {userid:3000, username: c, someOtherProperties...} 
Node 4 {userid:4000, username: D, someOtherProperties...} 
Node 5 {userid:5000, username: E, someOtherProperties...} 

節點1與節點2 & 3,並與節點1,3連接的節點2連接,4

1 -> 2 
1 -> 3 
2 -> 1 
2 -> 3 
2 -> 4 
3 -> 4 

現在我想節點1的用戶建議,其含有的未連接的那些節點與 它自我與相互計數。我想要這樣的結果。

node id userid username mutual count 
------- ------ -------- ------------- 
4 4000 D   2    (which is node 2 & 3) 
5 5000 E   0  

我曾嘗試密碼查詢,但我沒有得到成功。

+0

你嘗試什麼查詢所有其他節點?你能分享一下嗎? – Luanne

+0

謝謝@Luanne。我嘗試了以下查詢:START user = node:node_auto_index(「userid:*」),me = node:node_auto_index(userid ='92') WHERE user <> me WITH user MATCH pMutualFriends = me - [:friends ] - > mf < - [?: friends] -user RETURN user.userid,user.UserName,COUNT(pMutualFriends)As MutualCount Order by MutualCount desc;我忘了把'?'之前的關係,我已經糾正。我得到了我期望的結果,但我不確定。這是否正確? –

+0

所以你正在尋找一個用戶U,找到朋友U的所有朋友和U的朋友連接到朋友的朋友的數量?不知道爲什麼E在你的例子中出現,因爲沒有朋友連接到E.也許我誤解了你的查詢的目的? – Luanne

回答

0

請嘗試

START user=node:node_auto_index(name='A'), f=node(*) 
MATCH user-[r?:FRIEND*1..2]->(f) 
WITH DISTINCT r AS friendRelation,f 
RETURN count(friendRelation),f 

,這將給你的朋友關係的數量與深度2(朋友的朋友)

+0

謝謝@Luanne我不需要朋友的朋友,但我想與節點A的共同朋友 –

+0

對不起,但我很困惑。你能否定義你的共同朋友的意思?對於圖中的節點A console.neo4j.org/?id=h1p7it預期結果是什麼 – Luanne

+0

對不起@Luanne,我對英文不好,這就是爲什麼我無法正確解釋你。再次抱歉。我需要所有用戶名單和相互數量。意味着在我的情況下,node1(用戶名:A)是登錄用戶,並且希望搜索以某個詞開始的另一個用戶(例如'aakas。*')。並且如果某個節點存在用戶名'aakas'。這個記錄應該顯示相互計數。你能幫我嗎?或更多需要解釋你? –