【问题标题】:Neo4j cypher time interval histogram query of time treeNeo4j cypher时间树的时间间隔直方图查询
【发布时间】:2015-08-03 11:13:55
【问题描述】:

我想在 neo4j 中存储为时间树的时间序列构建直方图。 数据结构是用户完成的事件,每个都有时间戳,比如用户购买类别。 我需要的是每个用户在开始和结束时间之间浏览每个类别的次数,间隔为(1 秒到几天) 我的模型很好地表现了图形数据库,当我阅读neo4j documentation 时,我无法在一个查询中找到任何方法,而且我担心调用每个用户会很慢。

我知道密码功能,但我不知道如何创建这样的查询。 我正在寻找这样的东西(不工作)

MATCH startPath=(root)-[:`2010`]->()-[:`12`]->()-[:`31`]->(startLeaf),
endPath=(root)-[:`2011`]->()-[:`01`]->()-[:`03`]->(endLeaf),
valuePath=(startLeaf)-[:NEXT*0..]->(middle)-[:NEXT*0..]->(endLeaf),
vals=(middle)-[:VALUE]->(event)
WHERE root.name = 'Root'
RETURN event.name, count(*)
ORDER BY event.name ASC
GROUP BY event.timestamp % 1000*60*10 // 10 minutes histogram bar 

然后我想要一份报告,关于有多少用户浏览到每个网站类别:

0-9 新闻 5,商业 3 ; 10-19新闻6,商业19; 1 20-29 新闻 2,商业 8;

知道 Neo4j 时间树模型是否是可选的吗? 如果是这样怎么办? :-)

【问题讨论】:

  • 密码中没有“GROUP BY”;您应该在 WITH 表达式中计算额外的列,然后如果您返回 distinct ,它将以相同的方式运行。
  • 是的,我知道缺少 GROUP BY,我想创建基于时间的直方图。我可以做这样的事情:“WITH event.timestamp % 1000*60*10”得到 10 分钟吧?
  • 如果您将event.timestamp % 1000*60*10 放在您的RETURN 语句中,它应该会自动分组,因为您正在使用count 函数进行聚合。所以也许像RETURN event.name, event.timestamp % 1000*60*10 AS slice, count(*) ORDER BY slice
  • GROUP BY 没有丢失,它是从聚合列和非聚合列中自动推断出来的。

标签: neo4j timestamp time-series cypher


【解决方案1】:

这行得通吗?

MATCH
  startPath=(root)-[:`2010`]->()-[:`12`]->()-[:`31`]->(startLeaf),
  endPath=(root)-[:`2011`]->()-[:`01`]->()-[:`03`]->(endLeaf),
  valuePath=(startLeaf)-[:NEXT*0..]->(middle)-[:NEXT*0..]->(endLeaf),
  vals=(middle)-[:VALUE]->(event)
WHERE root.name = 'Root'
RETURN event.name, event.timestamp % 1000*60*10 AS slice, count(*)
ORDER BY slice ASC

基本上我只是将event.timestamp % 1000*60*10 添加到返回中,以便 Neo4j 将其用作分组标准

【讨论】:

  • 我认为 count(*) 不正确,我正在构建一个测试,我会尽快报告 :-)
  • 太好了,请告诉我! ;)
猜你喜欢
  • 2015-11-09
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多