Neo4j 2.1.2:正确访问长节点列表的方法

时间:2014-07-26 05:50:42

标签: neo4j cypher

我有一个挂起图表中节点的活动节点列表。这些活动按时间顺序排列,因此很容易返回最近的count个活动。该图如下所示:

 (:node)-[:ACTIVITY]->(:activity)-[:ACTIVITY]->(:activity)... 

在以前的版本(如2.0.1)中,我可以执行以下操作(这是事务性REST端点上的所有Cypher):

MATCH (n:node)-[:ACTIVITY*]->(a:activity)
WITH DISTINCT a SKIP { start } LIMIT { count }

其中startcount是确定要返回列表中哪些活动的参数。在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

由于只有一个活动节点,为什么第二个查询永远不会返回?查询长节点列表的正确方法是什么?

1 个答案:

答案 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作为查询的前缀?

否则它将是您的服务器扩展, 这是一个开头的例子:

https://github.com/jexp/neo4j-activity-stream