2015-09-01 40 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