2015-08-03 161 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

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