2015-09-01 42 views
3

我想根據用戶查看或更新文件的次數來計算特定用戶的「公司索引」。爲了得到這個,我將賦值給特定的路徑。這是一個例子:從1個密碼查詢中的幾個關係中提取權重

(u1:User {name: 'Alice'})-[:UPDATED]->(f:File)<-[:VIEWED]-(u2:User) // is worth 0.2 points 
(u1:User {name: 'Alice'})-[:VIEWED]->(f:File)<-[:VIEWED]-(u2:User) // is worth 0.1 points 
(u1:User {name: 'Alice'})-[:VIEWED]->(f:File)<-[:UDATED]-(u2:User) // is worth 0.2 points 
(u1:User {name: 'Alice'})-[:UPDATED]->(f:File)<-[:UPDATED]-(u2:User) // is worth 0.5 points 

該圖顯示了一個可能的圖。 a possible graph

我想知道查詢是如何看起來像返回以下結果。

User: Alice, User: Charly, index: (3 * 0.2) // 3 because there are 3 matching paths (Relationship with the lowest weight in the path) 
User: Alice, User: Bob, index: (3 * 0.1) 

這是我到目前爲止有:

MATCH (u1:User {name:'Alice'})-[r1:VIEWED]->(f:File)<-[r2:UPDATED]-(u2:User) 
OPTIONAL MATCH (u1:User {name:'Alice'})-[r3:VIEWED]->(f:File)<-[r4:VIEWED]-(u3:User) 
RETURN u2.name, min(r1.weight) AS ViewUpd, u3.name, min(r3.weight) AS ViewView 

該查詢根本不能工作,但我希望它澄清我想要什麼。

+0

您能否給我們提供更多關於您的關係的信息(例如,如果他們有一個重量屬性,這可能是有用的) – Supamiu

+0

當然。關係被標記爲VIEWED或UPDATED。嘿擁有的唯一屬性稱爲weight,它表示用戶更新或查看文件的頻率。 – markai

回答

1

[編輯]

此查詢是否做你想要的?

MATCH (u1:User { name:'Alice' })-[r1]->(f:File)<-[r2]-(u2:User) 
RETURN 
    u2.name AS name, 
    SUM(
    r1.weight * (CASE 
     WHEN (TYPE(r1)= "VIEWED" AND TYPE(r2)= "VIEWED") THEN 0.1 
     WHEN (TYPE(r1)= "UPDATED" AND TYPE(r2)= "UPDATED") THEN 0.5 
     ELSE 0.2 
     END)) AS index; 

Here is a console顯示此查詢,這裏是一個示例的結果:

+--------------------------------+ 
| name  | index    | 
+--------------------------------+ 
| "Bob"  | 0.6000000000000001 | 
| "Elvis" | 1.5    | 
| "David" | 0.6000000000000001 | 
| "Charley" | 2.1    | 
+--------------------------------+ 

在我的樣本數據,「查理」有UPDATED關係,並與File通過「是UPDATED一個VIEWED關係愛麗絲」。 Charley產生的index是這兩種關係的索引值的總和。

+0

謝謝!差不多了。現在我得到如下結果: 名稱:Sabine;數據:{type:UpdUpd;索引:950} 名稱:Sabine;數據:{type:UpdUpd;索引:550} 是否有可能爲每個用戶獲取一行?我不需要data.type(如果有幫助),我只想有一個獨特的用戶和索引值(在這​​種情況下,名稱:薩賓;數據:1.500) – markai

+0

請參閱我的更新的答案。 – cybersam

+0

這正是我想要的。非常感謝你 – markai

相關問題