我的(day)节点有(:NEXT)关系,所以
(年{年:2014}) - [:HAS_MONTH] - >(月{月:1}) - [:HAS_DAY] - >(day {day:1}) - [:NEXT] - >(day {day:2})
等等。
测量2个节点之间距离的最快方法是什么?如果我想说我想从2020年开始测量 - >第12个月 - >第31天回到2014年1月1日?
我试图使用[:NEXT *]然而只是超时,将其降低到[:NEXT * 0..100]似乎执行(虽然不是很快)
答案 0 :(得分:3)
也许发布您使用的查询可以帮助我们优化它,它也会显示您尝试的内容以及您是如何尝试的。
通常,如果您找到一种有效匹配起始节点和结束节点的方法,这种查询应该运行得非常快。
在当前模型中,年节点是唯一的,然后应使用唯一约束模式索引,从那里您可以有效地找到所需的节点。
MATCH (y:Year {year:2020})
MATCH (y)-[:HAS_MONTH]->(month {month:12})-[:HAS_DAY]->(day {day:31})
WITH day
MATCH (y2:Year {year:2014})
MATCH (y2)-[:HAS_MONTH]->(month2 {month:1})-[:HAS_DAY]->(day2 {day:1})
MATCH p=(day2)-[:NEXT*]->(day)
RETURN length(p)
但是,有几点可以帮助您的情况并优化当前查询:
LAST
关系,FIRST
和1月相同,每月相同天数此外,您可能需要查看GraphAware TimeTree Neo4j插件:https://github.com/graphaware/neo4j-timetree