2017-03-17 80 views

回答

1

allShortestPaths功能枚举两个节点之间的所有最短路径。因此,对于您的查询,它需要所有可能的objectapiUser节点对,并枚举每对之间的所有最短路径。那么我们如何阻止这种情况发生?

首先,你可能要简化你这样的原始查询:

MATCH p=allShortestPaths((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
LIMIT 1 

其次,如果你只需要一个路径,为什么不使用shortestPath功能?

MATCH p=shortestPath((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
LIMIT 1 

这仍然将计算的最短路径为每个apiUser,所以你要根据路径的长度责令结果:

MATCH p=shortestPath((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
ORDER BY length(p) DESC 
LIMIT 1 

这是不是最有效的解决方案,因为Neo4j仍将计算每个apiUser的最短路径 - 解决方案是否适用于您的用例取决于数据库中的apiUser的数量。

0

当从单个节点匹配,可变长度匹配LIMIT 1应该工作:

MATCH (object{id:'1489751911095'})-[*]-(p:ApiUser) 
RETURN p limit 1 

我们建议寻找增长性的节点时,在你的对手一个标签,索引或对标签+属性的唯一约束,所以它是一个快速匹配。

如果您不确定附近是否有该类型的节点,则可能需要为可变长度匹配添加上限。

相关问题