限制查询在cypher查询中搜索的路径数量而不是限制

时间:2014-11-28 07:10:14

标签: neo4j cypher

我希望查询在找到前10个路径后立即停止并返回。 但默认情况下,limit子句会查找所有路径,然后只返回前10个路径。 因为在我的情况下总路径将在10k到20k左右,这样做是不切实际的。 我尝试了两个不起作用的查询

match path = (first:Job)-[:PRECEDES*]->(last:Job)
where first.name = 'xyz' and last.name = 'abc'
return nodes(path) as pathlist

match path1 = (first:Job)-[:PRECEDES*]->(middle:Job)
where first.name = 'xyz' 
with middle, path1
match path2 = (middle:Job)-[:PRECEDES*]->(last:Job)
last.name = 'abc'
return nodes(path1),nodes(path2) as pathlist

两者都需要永远完成。

1 个答案:

答案 0 :(得分:1)

确保有一个索引:

CREATE INDEX ON :Job(name)

通过在neo4j-shell中使用PROFILE检查语句,我发现以下是最便宜的变体:

 MATCH (a:Job {name:'xyz'}), (b:Job {name:'abc'}) 
 MATCH path=(a)-[:PRECEDES*]->(b) 
 RETURN nodes(path) LIMT 10

请注意,我正在谈论Neo4j 2.1.6。由于Cypher的实施正在稳步发展,即将推出的版本可能已经适当地优化了您的陈述。