时间树的Neo4j cypher时间间隔直方图查询
Neo4j cypher time interval histogram query of time tree
我想在 neo4j 中存储为时间树的时间序列上构建直方图。
数据结构是由用户完成的事件,每个事件都有时间戳,比如用户购买类别。
我需要的是每个用户在开始和结束时间之间浏览每个类别的次数,间隔为(1 秒到几天)
我的模型非常好地使用 graph db,正如我所读 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 时间树模型是否可选吗?
如果是这样怎么办? :-)
这个有用吗?
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
添加到 return 中,以便 Neo4j 将其用作分组标准
我想在 neo4j 中存储为时间树的时间序列上构建直方图。 数据结构是由用户完成的事件,每个事件都有时间戳,比如用户购买类别。 我需要的是每个用户在开始和结束时间之间浏览每个类别的次数,间隔为(1 秒到几天) 我的模型非常好地使用 graph db,正如我所读 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 时间树模型是否可选吗? 如果是这样怎么办? :-)
这个有用吗?
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
添加到 return 中,以便 Neo4j 将其用作分组标准