在neo4j中获取链表的“切片”

时间:2015-03-03 05:54:43

标签: neo4j cypher

所以,我有一个类似于链表的结构。每个节点都有一个prev字段,用于前一个节点的id,我使用chain关系将它们链接在一起。在某些情况下,节点不是此链的一部分,即它的“prev”指向另一个节点,但没有任何指向它...或只有1个节点指向它。

我想对此列表进行“切片”,仅包括直接链接的节点。即,从节点A的点返回到节点B,返回其间的所有节点。

这是我到目前为止所拥有的

match (fb {id: A}) - [:chain] -> (eb {id:B})
return fb

然而,它没有返回结果......我想我需要它以某种方式递归,但我不知道如何表明。我尝试过使用:chain *,但这往往会永远处理。我想我需要一种限制它的方法..

我该怎么做?

1 个答案:

答案 0 :(得分:0)

这个怎么样?

MATCH (fb {id: A})-[:chain*1..10]->(eb {id:B})
RETURN fb

这应该将其限制在10个级别。显然,如果你愿意,你可以改变它,但它会影响性能

编辑:刚刚阅读本指南以进行性能调整:

http://neo4j.com/developer/guide-performance-tuning/

引起我注意的一点:

  

如果您正在使用具有相对较大工作集的查询   (即,将穿越长路,看着很多属性,或者   收集大量结果以便进行排序等)   你需要一个更大的工作堆。如果你有小的查询   您需要非常有限的遍历并返回少量数据   减。假设1-2GB从那里开始和调整