Neo4j 在1-cypher查询中从多个关系中提取权重
我想根据用户查看或更新文件的次数来计算特定用户的“公司索引”。为了得到这个,我将为某些路径赋值。这是一个例子:Neo4j 在1-cypher查询中从多个关系中提取权重,neo4j,cypher,Neo4j,Cypher,我想根据用户查看或更新文件的次数来计算特定用户的“公司索引”。为了得到这个,我将为某些路径赋值。这是一个例子: (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'})-[: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
这就是我到目前为止所做的:
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
MATCH(u1:User{name:'Alice'})-[r1:views]->(f:File)(f:File)[编辑]
此查询是否符合您的要求
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;
在我的示例数据中,“Charley”与“Alice”更新的文件有关系,与文件有关系。Charley得到的索引
是这两种关系的索引值之和。当然,你能给我们更多关于你的关系的信息吗(例如,如果它们有权重属性,这可能很有用)。这些关系被标记为“已查看”或“已更新”。他们唯一的属性是weight,它表示用户更新或查看文件的频率。谢谢!差不多了。现在我得到的结果是这样的:Name:Sabine;数据:{类型:UpdUpd;索引:950}名称:Sabine;数据:{type:UpdUpd;index:550}每个用户可以得到一行吗?我不需要data.type(如果有帮助的话),我只想有一个不同的用户和索引值(在本例中为名称:Sabine;data:1.500),这正是我想要的。非常感谢你
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;
+--------------------------------+
| name | index |
+--------------------------------+
| "Bob" | 0.6000000000000001 |
| "Elvis" | 1.5 |
| "David" | 0.6000000000000001 |
| "Charley" | 2.1 |
+--------------------------------+