我的数据组织方式如下:
(:Node {id:<int>})-[:INTERACTED_WITH {time:<epoch integer>}]->(:Node {id:<int>})使用
CREATE INDEX ON :INTERACTED_WITH(time)即在特定时间与其他节点交互的节点。
我要进行的查询是一个滑动窗口查询。我只是简单地计算任何两个节点在一个窗口中的交互作用,该窗口在较长的时间间隔内滑动。对于单个窗口,查询如下:
MATCH (a:Node)-[r:INTERACTED_WITH]->(b:Node) WHERE
r.time >= <window_start_time> AND
r.time < <window_start_time + window_size>
RETURN a.id, b.id, COUNT(r)现在,我正在以编程的方式执行完整的查询,在while循环中,但是我发现它非常慢。
我要寻找的基本上是一个类似SQL的滑动窗口查询,您可以动态创建一系列窗口启动时间(作为临时表),并在此基础上查询数据库中的表。
赛弗里有类似的东西吗?
发布于 2014-09-18 13:24:16
有几种方法可以让你做到这一点。举个例子,你可以写
UNWIND range(<start time>, <end time>, <step size>) AS t
MATCH (a:Node)-[r:INTERACTED_WITH]->(b:Node)
WHERE r.time >= t AND r.time < t + window_size
RETURN a.id, b.id, COUNT(r)还可以创建一组临时节点,将窗口边界作为属性。假设你有这些,你可以写
MATCH (c:Window)
MATCH (a:Node)-[r:INTERACTED_WITH]->(b:Node)
WHERE r.time >= c.start_time AND r.time < c.end_time
RETURN a.id, b.id, COUNT(r)完成之后,您可以删除:Window节点。
https://stackoverflow.com/questions/25912710
复制相似问题