Cypher按路径成本排序

jab*_*jab 2 neo4j cypher

我是cypher和neo4j的新手.我想根据总路径成本获取并命令A点和B点之间的所有路径.在这种情况下,成本是一个整数的关系属性.路径成本是关系属性的总和.

我正在查看cypher的ORDER BY语句的一些示例,但是,通过示例,您似乎必须按已经分配给正在订购的对象的属性进行排序,在这种情况下,由于路径没有,因此无法工作静态的"成本"属性.

(这与btw的路径长度/数量不同)

我很确定这样的事情对于密码来说并不复杂.

Eve*_*man 9

几天前我尝试过并没有做过与此类似的事情.问题在于,您无法获得集合的总和,只能获得聚合的总和.

请参阅:https: //groups.google.com/d/topic/neo4j/_MqwGp1a1Oo/discussion

我希望他们能在Cypher中添加一些功能,但即使在专家Michael Hunger的帮助下,我也无法使用它.

更新我实际上在今天的Cypher代码中用了一个表达式来完成这个.我不确定它是否会被1.9接受,但也许它的某种形式很快就会进入社区版.

更新2他们已经将我的请求合并reduce到1.9-SNAPSHOT中,我将更新下面的语法.

它基本上完全符合你的要求 - 我的数据的一个稍微陈旧的版本在这里:http: //console.neo4j.org/r/2rvznu

这是Cypher(注意,目前需要1.9-SNAPSHOT):

   START n=node(18) 
   MATCH p=n-[r*]->m 
   WHERE not(m-->()) 
    WITH extract(x in r: x.score) as scores, length(p) as len
  RETURN scores, reduce(res=0, x in scores: res + x) as totalscore, len 
ORDER BY totalscore desc;
Run Code Online (Sandbox Code Playgroud)

得到:

+------------------------------------------+
| scores        | totalscore         | len |
+------------------------------------------+
| [0.9,0.9,3.7] | 5.5                | 3   |
| [0.8,0.79]    | 1.59               | 2   |
| [0.4,0.75]    | 1.15               | 2   |
| [0.4,0.45]    | 0.8500000000000001 | 2   |
+------------------------------------------+
Run Code Online (Sandbox Code Playgroud)