首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NEO4J按时间查找连续路由

NEO4J按时间查找连续路由
EN

Stack Overflow用户
提问于 2015-07-27 06:26:04
回答 1查看 45关注 0票数 0

我有40个站,用ID标识,那么我这个站之间有大约30k的关系,关系有时间属性(到达发车时间和线路名称)。我需要找到A站和B站之间的路线,但要有具体的时间范围。例如:

站A和站C之间不是直达路线,必须使用A -> B -> C= means id: 1 -> 2 -> 3

我使用这个查询:

代码语言:javascript
复制
MATCH p=(s1:L2Station{id:1})-[r:RIDE*]->(s2:L2Station{id:3}) WHERE ALL(x in r where x.deptime>=1438605300 AND x.deptime<=1438691700) 
WITH reduce(acc = [], route in rels(p)|
CASE 
WHEN toInt(route.arrtime) < last(extract(b in acc| b.deptime))   THEN null
WHEN length(acc) > 0  AND last(extract(a in acc| a.rid)) = route.rid THEN acc + route
ELSE acc + route 
END) as reducedRoutes
WHERE reducedRoutes is not null
return reducedRoutes, length(reducedRoutes) as len
order by len;

但是这个查询花费了大约8分钟:(

如果我使用这个查询:

代码语言:javascript
复制
MATCH p=(s1:L2Station{id:1})-[r:RIDE]->(s2:L2Station{id:3}) WHERE r.deptime>1438732800 AND r.deptime<1438819200 
....

不返回任何内容。我只能去有直达路线的车站。

有人能帮我吗?

谢谢

Ondra

EN

回答 1

Stack Overflow用户

发布于 2015-07-28 03:29:51

您可能正在看到尝试匹配一个无界路径长度的影响:[r:RIDE*]。从逻辑上讲,这会迫使neo4j遵循从站点1开始的每条可能的路径,看看哪条路径在站点2结束。可能只有几条尝试的路径最终会匹配,但neo4j被迫沿着每条路径一直走到痛苦的尽头。

如果可能,您应该尝试设置路径长度的上限。例如,要匹配最大长度为3的路径:[r:RIDE*..3]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31642564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档