根据Neo4J中路径的参数对节点进行排序

时间:2015-02-21 07:04:33

标签: neo4j cypher

我有100个节点,n1,n2,n3等,它们由三种不同的关系r1,r2和r3连接。这种关系中的每一个都有一个名为" weight"这是一个介于5,10和15之间的数字。我需要根据每个节点的总路径数量以及基于权重的另一个排名来开发排名。总路径i表示如果N1- [r1] - > n2且n2- [r1] - > n3且n3- [r3] - > n4则则n1的路径总数将为3。按重量排列的是5 + 5 + 15 = 25。

理想情况下,查询将返回排名的节点列表。

有没有办法在密码中做到这一点?

感谢

2 个答案:

答案 0 :(得分:1)

这样的东西?

MATCH (n1:Label {id:1})-[r1]->(n2:Label {id:2})-[r2]->(n3:Label {id:3})-[r3]->()
RETURN n1, 
      SUM(r1.weight+r2.weight+r3.weight) as weight, 
      count(*) as paths
ORDER BY weight desc, paths desc

答案 1 :(得分:1)

尝试这一点,当然还要对您的数据模型进行一些调整:

MATCH path=(a:Foo)-[:r1|r2|r3*]->(d:Foo) 
RETURN length(path) as NumberOfStepsInPath, 
       reduce(sum=0, y in 
              extract(x in relationships(path) | x.weight) 
              | sum + y) 
       as TotalCost;

因此,这与您指定的任何关系类型a上的dr1|r2|r3的路径相匹配。路径的长度很简单,只有length(path)。对权重求和更多一些。首先,您extract路径中每个关系的权重属性。然后,您reduce将权重列表缩减为单个sum