2015-08-03 159 views
2

我想建立一个时间序列存储为neo4j时间树的直方图。 数据结构是由用户完成的事件,每个都有时间戳,比如用户购买类别。 我需要的是每个用户在开始和结束时间之间每个类别的浏览次数,间隔时间为(1秒到几天) 我的模型非常棒,图片分辨率非常好,因为我读neo4j documentation我找不到任何在一个查询中做到这一点,我担心每个用户的呼叫速度会很慢。Neo4j密码时间间隔直方图查询时间树

Time tree model

我知道,以暗号功能,但我不知道如何建立这样的查询。 我期待这样的事情(不工作)

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时间树模型? 如果是这样怎么样? :-)

+0

有没有“GROUP BY”的暗号;你应该在WITH表达式中计算额外的列,然后如果你返回不同的值,它将以相同的方式运行。 – FrobberOfBits

+1

是的,我知道GROUP BY缺失,我想创建基于时间的直方图。我可以做这样的事情: “WITH event.timestamp%1000 * 60 * 10”获得10分钟的酒吧? –

+1

如果您在'RETURN'语句中放置'event.timestamp%1000 * 60 * 10',它应该自动分组,因为您正在使用'count'函数进行聚合。所以也许像'RETURN event.name,event.timestamp%1000 * 60 * 10 AS slice,count(*)ORDER BY slice'? –

回答

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将使用它作为分组标准

+0

我的计数(*)是不正确的,我正在建设一个测试,我会尽快报告:-) –

+0

太棒了,让我知道! ;) –