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                |
+--------------------------------+