连接到起点和终点之间的时间轴中的节点

时间:2018-02-14 18:23:58

标签: neo4j cypher

我创建了一个Needham时间树(http://www.markhneedham.com/blog/2014/04/19/neo4j-cypher-creating-a-time-tree-down-to-the-day/),直到一小时。 在每个小时节点上我存储了纪元时间

CREATE (h:Hour {hour: hour, day:day, month: month, year:year, time: apoc.date.parse(year +"-"+month+"-"+day+" "+hour+":00", "s", "yyyy-MM-dd hh:mm")})

现在我想在事件节点上的开始和结束时间之间的每小时链接。

的内容
create (e:Event {startHour: <some unix time>, endHour: <some later unix time>})
with e
match (h:Hour) 
FOREACH (hour in range(startHour, endHour) |
    merge (e)-[:IN_HOUR]->(h))

显然,由于startHour和endTime是大纪元时间而不是实际小时,因此无法工作。

我确实时间树中的小时数与[:NEXT]关系相关联。我能以某种方式使用它吗?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

CREATE (e:Event {startHour: <some unix time>, endHour: <some later unix time>})
WITH e
MATCH (h:Hour)
USING INDEX h:Hour(time)
WHERE e.startHour <= h.time <= e.endHour
MERGE (e)-[:IN_HOUR]->(h);

USING INDEX子句为Cypher计划者提供了一个暗示它应该使用索引(我假设你已经拥有:Hour(time))。

[EDITED]

即使startHourendHour实际上不是一小时,这也会有用。但是,如果您希望将startHour视为向下舍入到小时,则WHERE子句可以使用e.startHour/3600*3600代替e.startHour