首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >neo4j中的滑动时间窗口查询

neo4j中的滑动时间窗口查询
EN

Stack Overflow用户
提问于 2014-09-18 12:32:20
回答 1查看 288关注 0票数 1

我的数据组织方式如下:

代码语言:javascript
复制
(:Node {id:<int>})-[:INTERACTED_WITH {time:<epoch integer>}]->(:Node {id:<int>})

使用

代码语言:javascript
复制
CREATE INDEX ON :INTERACTED_WITH(time)

即在特定时间与其他节点交互的节点。

我要进行的查询是一个滑动窗口查询。我只是简单地计算任何两个节点在一个窗口中的交互作用,该窗口在较长的时间间隔内滑动。对于单个窗口,查询如下:

代码语言:javascript
复制
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的滑动窗口查询,您可以动态创建一系列窗口启动时间(作为临时表),并在此基础上查询数据库中的表。

赛弗里有类似的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 13:24:16

有几种方法可以让你做到这一点。举个例子,你可以写

代码语言:javascript
复制
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)

还可以创建一组临时节点,将窗口边界作为属性。假设你有这些,你可以写

代码语言:javascript
复制
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节点。

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

https://stackoverflow.com/questions/25912710

复制
相关文章

相似问题

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