我非常新CYPHER和Neo4j的。 我希望得到和订购基于总的路径成本点A和B之间的所有路径。 在这种情况下,成本是有关系的属性,它是一个整数。 路径开销将是关系属性的总和。
我在看暗号的ORDER BY语句的一些例子然而,通过实例,似乎你必须是已经分配给对象的属性命令被命令,在这种情况下,这是行不通的,因为路径没有一个静态的“成本”属性。
(这是从路径长度/数不同顺便说一句)
我很喜欢这个非常肯定的事情是不是CYPHER太复杂了。
我非常新CYPHER和Neo4j的。 我希望得到和订购基于总的路径成本点A和B之间的所有路径。 在这种情况下,成本是有关系的属性,它是一个整数。 路径开销将是关系属性的总和。
我在看暗号的ORDER BY语句的一些例子然而,通过实例,似乎你必须是已经分配给对象的属性命令被命令,在这种情况下,这是行不通的,因为路径没有一个静态的“成本”属性。
(这是从路径长度/数不同顺便说一句)
我很喜欢这个非常肯定的事情是不是CYPHER太复杂了。
我尝试和失败做的非常类似这样的东西,前几天。 问题就在于,你不能得到一个集合的总和,只有聚集的总和。
请参阅: https://groups.google.com/d/topic/neo4j/_MqwGp1a1Oo/discussion
我希望他们在暗号此添加一些功能,但我无法得到它的工作,即使有专家的帮助迈克尔 - 饥饿。
更新我实际上是在Cypher支架代码今天戳,使所做的正是这样的一个表达。 我不知道这是否会由1.9所接受,但也许它的某种形式将进入社区版推出。
更新2他们已经在我的拉动请求合并为reduce
到1.9快照,下面我将更新的语法。
它基本上什么你问-我的数据的略微陈旧版本是在这里: http://console.neo4j.org/r/2rvznu
而这里的CYPHER( 注意,目前要求1.9快照 ):
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;
得到:
+------------------------------------------+
| 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 |
+------------------------------------------+
对于大家google搜索这个问题的方便,我更新@前夕 - 弗里曼的答案的Neo4j 3.0
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;
区别是:括号需要识别的模式管节点| 代替冒号:用于单独在函数“在列表中的变量”和表达