我有一个挂起图表中节点的活动节点列表。这些活动按时间顺序排列,因此很容易返回最近的count
个活动。该图如下所示:
(:node)-[:ACTIVITY]->(:activity)-[:ACTIVITY]->(:activity)...
在以前的版本(如2.0.1)中,我可以执行以下操作(这是事务性REST端点上的所有Cypher):
MATCH (n:node)-[:ACTIVITY*]->(a:activity)
WITH DISTINCT a SKIP { start } LIMIT { count }
其中start
和count
是确定要返回列表中哪些活动的参数。在Neo4j 2.1.2中,这会导致CPU加速到100%并挂起Neo4j,直到你强制停止它。所以我试图在我的查询中设置一个限制,但任何大于50的东西都不会返回。
此查询返回1个活动节点:
MATCH (n:node)-[:ACTIVITY*0..10]->(a:activity)
RETURN a
此查询将CPU固定为100%并且永不返回:
MATCH (n:node)-[:ACTIVITY*0..100]->(a:activity)
RETURN a
由于只有一个活动节点,为什么第二个查询永远不会返回?查询长节点列表的正确方法是什么?
答案 0 :(得分:1)
Cypher尚不适合处理长单关系列表。
Mark刚刚发布了一篇关于它的博文:
http://www.markhneedham.com/blog/2014/07/20/neo4j-2-1-2-finding-where-i-am-in-a-linked-list/
我使用新的cypher查询规划器进行了一些实验,它的速度要快得多。
https://gist.github.com/jexp/4c2601d68d54d8a9c939
你能尝试使用吗? cypher 2.1.experimental
作为查询的前缀?
否则它将是您的服务器扩展, 这是一个开头的例子: