Neo4j路径查询包括循环

时间:2014-10-31 10:20:44

标签: neo4j cypher

假设我们有一个包含此周期的图表:

{id:1, start:true, end:false} --> {id:2, start:false, end:true}
{id:1, start:true, end:false} <-- {id:2, start:false, end:true}

我想编写一个查询,查找从具有start:true的节点到具有end:true的节点的特定长度的所有路径,如(长度为3):

(n1 {start: true})-[:*3]-(n4 {end: true})

但结果应包括循环路径,如:

{id:1, start:true, end:false} --> {id:2, start:false, end:true} --> {id:1, start:true, end:false} --> {id:2, start:false, end:true}

这在Cypher 2.1中是否可行?

1 个答案:

答案 0 :(得分:2)

这个问题的答案是肯定的,您在示例查询中使用的语法是正确的。这是正确的,因为您在查询中留下了任何方向指示符,这意味着将在向前和向后方向上进行遍历。

我不确定的一件事是你是否可以使用startend作为属性名称,如果可以的话,是否应该使用它们,因为它们都在Cypher中起作用。

编辑 - 理解了问题

我认为Cypher不会在遍历中恢复关系,虽然我看不到任何关于此的文档,但它代表了一些奇怪的路径分析结果。我相信你可以使用遍历API编写自己的遍历,可以......

你可以在Cypher中实现你想要的,我的版本不能很好地扩展到更长的路径,我确信有人可以做得比这更好:

MATCH (a:Thing{start:true})-[:REL]-(b:Thing)
WITH DISTINCT a, b
MATCH (b)-[:REL]-(c:Thing)
WITH DISTINCT a, b, c
MATCH (c)-[:REL]-(d:Thing{end:true})
RETURN DISTINCT a, b, c, d