我对 neo4j 有疑问。 我不知道是我的问题还是其他问题。
简介
我必须构建一个存储公共(public)汽车/火车路线的应用程序。 这是我的模式:
节点:
- Organizaton:有路线/巴士等的公司。
- 路线:巴士路线,例如:巴黎 - 柏林。
- 车辆(在本例中为公共(public)汽车):具有唯一牌照的公共(public)汽车。
- 停靠点: map 中带有经纬度的点。
重要关系:
- NEXT:这是一段非常重要的关系。
NEXT 关系包含那些属性:
- 开始时间
- 开始分钟
- 结束时间
- session 结束
- dayOfWeek(从 0 到 6 - 周日、周一等)
- 车辆编号
问题
我的查询是:
MATCH (s1:Stop {id: {departureStopId}}), (s2:Stop {id: {arrivalStopId}})
OPTIONAL MATCH (s1)-[nexts:NEXT*]->(s2)
WHERE ALL(i in nexts WHERE toInt(i.dayOfWeek) = {dayOfWeek} AND toInt(i.startHour) >= {hour})
RETURN nexts
LIMIT 10
例如:我想找到 dayOfWeek 为星期日 (0) 且属性 startHour > 11 的所有下一个关系
之后,我通常会在我的 nodejs 后端上解析和验证最终对象。
这在我刚开始的时候有效..有 1k 关系.. 现在我有 10k 的关系,我的查询有超时问题或查询在 30 秒内解决..太多时间...... 我不知道如何解决这个问题。 我将 neo4j 与 docker 一起使用,我尝试阅读设置文档,但我不知道 Java 是如何工作的。
你们能帮帮我吗?
更新
谢谢大家! 现在我用“allShortestPaths”解决了问题,但我想我会重命名所有关系(如 Michael Hunger 所说)。
最佳答案
你试过吗:
MATCH p=allShortestPaths((s1:Stop {id: {departureStopId}})-[:NEXT*]-> (s2:Stop {id: {arrivalStopId}}) )
WHERE ALL(i in RELS(p) WHERE toInt(i.dayOfWeek) = {dayOfWeek} AND toInt(i.startHour) >= {hour})
RETURN rels(p) as nexts
LIMIT 10
这应该使用快速最短路径算法,因为:
Planning shortest paths in Cypher can lead to different query plans depending on the predicates that need to be evaluated. Internally, Neo4j will use a fast bidirectional breadth-first search algorithm if the predicates can be evaluated whilst searching for the path.
关于java - Neo4j - Java 堆空间。错误的查询或设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43168152/