得到一个;切片;neo4j中链表的构造

得到一个;切片;neo4j中链表的构造,neo4j,cypher,Neo4j,Cypher,所以,我有一个类似链表的结构。每个节点都有一个prev字段,用于将id链接到上一个节点,我使用链将它们链接在一起。在某些情况下,一个节点不属于该链,即它的“prev”指向另一个节点,但没有指向它。。或者只有1个节点指向它 我想从这个列表中取一个“切片”,只包括直接链接的节点。即,从节点A返回节点B,返回中间的所有节点 这就是我目前所拥有的 match (fb {id: A}) - [:chain] -> (eb {id:B}) return fb 但是,它不会返回任何结果。。。我想我需要

所以,我有一个类似链表的结构。每个节点都有一个
prev
字段,用于将
id
链接到上一个节点,我使用
链将它们链接在一起。在某些情况下,一个节点不属于该链,即它的“prev”指向另一个节点,但没有指向它。。或者只有1个节点指向它

我想从这个列表中取一个“切片”,只包括直接链接的节点。即,从节点A返回节点B,返回中间的所有节点

这就是我目前所拥有的

match (fb {id: A}) - [:chain] -> (eb {id:B})
return fb
但是,它不会返回任何结果。。。我想我需要它以某种方式进行递归,但我不确定如何表明这一点。我尝试过使用:chain*,但这往往会永远持续下去。我想我需要一个方法来限制它

我该怎么做

这个怎么样

MATCH (fb {id: A})-[:chain*1..10]->(eb {id:B})
RETURN fb
这应该限制在10个级别。很明显,如果您愿意,您可以改变这一点,但这会影响性能

编辑:刚才正在阅读此性能调整指南:

有一点引起了我的注意:

如果您使用的查询将有一个相对较大的工作集 (即,将穿越长路径,查看大量财产,或 收集大量结果以进行排序等)然后 你需要一个更大的工作堆。如果您有小的查询,那么 非常有限的遍历和返回少量数据,您需要 较少的假设从那里开始并调谐1-2GB


你有多大?A和B之间有很多路吗?@DaveBennett Farly large。。10K或更高,所以没有办法(使用快速查询响应)将其提升到任意级别?或者像1000级之类的东西我不知道cypher的。对于这样的事情,我认为您应该使用java(或者其他语言的java兼容性,比如JRuby For Ruby)。您还可以研究neo4j非托管扩展,它允许您在neo4j中创建一个端点,该端点将返回您想要的结果。。我还可以访问一个数字(递增)“高度”字段,它基本上表示节点在链接列表中的位置。。我知道我可以在足够容易的地方使用这个。。但是,我需要排除从列表中分支的节点(即,实际上没有连接到结束节点)。这种方法会更简单吗?它可能有助于Neo4j过滤结果,尽管我猜测那些分支的节点的
高度
值与您要查找的范围相同,对吗?在我的示例查询中,您可以尝试将
10
更改为
1000
,看看它是否运行良好。我想你有很多分支?树枝要走很长的“距离”?是的,它们的高度应该是一样的。。。分支应该非常小,比如少于10个节点。。。尽管我需要能够在它们可能是100-200个节点的情况下运行