我希望查询在找到前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
两者都需要永远完成。
答案 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的实施正在稳步发展,即将推出的版本可能已经适当地优化了您的陈述。