我目前正在使用neo4j 2.2.5
。我有大约3000万真正的航班和大约数千个机场。我有Flight
和Airport
个节点,还有HAS_FLIGHT
和FLYING_TO
个关系。这些关系连接两个节点,源Airport
节点已通过Flight
关系与HAS_FLIGHT
节点连接,Flight
节点已通过FLYING_TO
关系与目标{连接{1}}。
所以我的问题是,当我试图找到从伦敦市到东京市的最多2个机场或中转机场的航线时,我的查询将花费超过20分钟,最后连接丢失。
这是我的问题:
//从伦敦到东京的航班路径
Airport
答案 0 :(得分:1)
上面的查询为您提供了最高级别为6的所有路径。在大多数情况下,您只需要最短的路径:
MATCH path = allShortestPaths( (london :Airport{city:'London'})-[:HAS_FLIGHT|FLYING_TO*0..6]->(tokyo :Airport{city:'Tokyo'}))
RETURN path;
shortestPath
和allShortestPaths
速度要快得多,因为它们会跳过尽可能早地延长的路径。这应该会减少对内存和垃圾收集的压力。
还要像威廉在评论中提到的那样仔细检查索引。