给定关系上的属性,如何返回路径和节点属性?

时间:2014-09-16 00:56:04

标签: neo4j cypher

我是neo4j的新手,我正在尝试将最长路径映射到已知节点。在这个例子中,只有一条直线路径。 (例如,node1 => node2 => node3 => node4 => node5 => node6)。我该如何编写该查询?

复杂性是仅限制关系和特定属性。例如,所有的关系都是类型:KNOWS,但是它有一个属性“signal”,我想只为关系运行查询r:KNOWS其中r.signal = 10.

以下是获取路径中最后两个节点的方法:

MATCH (end)<-[r:knows]-(node)
WHERE r.signal = 10
AND end.name = 4
RETURN node.name, end.name, r.signal

这是我下次尝试使用*来获取所有长度,以及过滤器和提取的组合来处理集合:

MATCH (end)<-[r:knows*]-(node)
WHERE end.name = 4
WITH end, node, [x IN r WHERE x.signal = 10 | x.signal] as signals
RETURN node.name, end.name, signals

但它仍然不太正确,因为它返回所有迭代,只返回对。我想找到最长的路径,并返回所有节点名称的数组(不只是一次一对)。有关如何处理此问题的任何指示都非常受欢迎,或者是指向教程的有用链接。我已经完成了neo4j在线培训。

1 个答案:

答案 0 :(得分:0)

这是获得最大长度/最长路径的方法:

MATCH p=(end {name: 4})<-[r:knows*]-(node)
WITH max(length(p)) as longestPathLength
MATCH p2=(end {name: 4})<-[r:knows*]-(node)
WITH [x IN nodes(p2) | x.signal] as signals, 
     p2 as p2, 
     longestPathLength as longestPathLength
WHERE length(p2) = longestPathLength
RETURN p2, signals;

首先,您需要匹配路径并将其分配给变量,此处为pp2。您可以在nodes(p2)之间使用集合函数提取节点名称。最后,要找到最长的路径长度,只需查找所有路径长度,然后选择具有最大长度的路径。然后返回并从恰好具有该长度的路径中仅提取节点名称。

这可能不是最有效的方法,但它看起来很有效。

相关问题