Hey I'm reposting this from 
http://stackoverflow.com/questions/37762385/time-based-data-query-with-neo4j-showing-more-relations-than-expected

Any help or comments would be awesome:


I'm trying to get my mind around Neo4J and time based data.

So what I basically wanted to build is a data structure which is capable of 
giving me a tracking node (page view) with its referrer and its 
referrers-referrer on a certain time.

My problem is, that if I save data with its relations to the timetree there 
are still appearing relations which shouldn't be visible when querying a 
certain time by hour.

During research I found this article about modeling time series data with 
neo4j <https://www.graphgrid.com/modeling-time-series-data-with-neo4j/>.

So far all was well going but the referrer and its child relations were not 
abstracted by time.

To illustrate by problem better here comes first the data structure:

I created an index:

CREATE INDEX ON :Year(value);
CREATE INDEX ON :Month(value);
CREATE INDEX ON :Day(value);
CREATE INDEX ON :Hour(value);
CREATE INDEX ON :Minute(value);
CREATE INDEX ON :Second(value);

And put there the time nodes:

//Create Time Tree with Day Depth
WITH range(2015, 2017) AS years, range(1,12) AS months
FOREACH(year IN years |
   CREATE (y:Year {value: year})
   FOREACH(month IN months |
     CREATE (m:Month {value: month})
    MERGE (y)-[:CONTAINS]->(m)
    FOREACH(day IN (CASE
                       WHEN month IN [1,3,5,7,8,10,12] THEN range(1,31)
                      WHEN month = 2 THEN
                        CASE
                          WHEN year % 4 <> 0 THEN range(1,28)
                           WHEN year % 100 = 0 AND year % 400 = 0 THEN 
range(1,29)
                           ELSE range(1,28)
                         END
                       ELSE range(1,30)
                     END) |
       CREATE (d:Day {value: day})
       MERGE (m)-[:CONTAINS]->(d))))

If i now save data:

MERGE (a:tracking {ip:'someniceid', type:'page_view', timestamp:'2154645'})
MERGE (f:Domain {name:'domain1.com'})
MERGE (e:Domain {name:'domain2.com'})
MERGE (d:Domain {name:'domain3.com'})
MERGE (z:Domain {name:'domain4.com'})
MERGE (a)-[:CAME_FROM]->(f)
MERGE (f)-[:REFERRED_BY]->(e)
MERGE (e)-[:REFERRED_BY]->(d)
MERGE (d)-[:REFERRED_BY]->(z)
WITH a, 2016 AS y 
MATCH (year:Year {value: y})
WITH a, year, 5 AS m 
MATCH (year)-[:CONTAINS]->(month:Month {value: m})
WITH a, month, 9 AS d 
MATCH (month)-[:CONTAINS]->(day:Day {value: d})
WITH a, day, 14 AS h 
MERGE (day)-[:CONTAINS]->(hour:Hour {value: h})
MERGE (a)-[:HAPPENED_ON]->(hour)

I get the following graph with query:

MATCH (y)-[:CONTAINS]->(m:Month {value: 5}) WITH y, m
MATCH (m)-[:CONTAINS]->(d {value: 9}) WITH y, m, d
MATCH (d)-[:CONTAINS]->(h {value: 14}) WITH y, m, d, h
MATCH (a:tracking)-[:HAPPENED_ON]->(h),(a)-[:CAME_FROM|:REFERRED_BY*]->(dom) 
RETURN dom AS D, a AS A

[image: enter image description here] <http://i.stack.imgur.com/wcS6m.jpg>

When I now save one more dataset with the only difference of changing the 
hour and domain (instead of domain4 we have now domain6) like:

MERGE (a:tracking {ip:'someniceid', type:'page_view', timestamp:'2154645'})"
MERGE (f:Domain {name:'domain1.com'})
MERGE (e:Domain {name:'domain2.com'})
MERGE (d:Domain {name:'domain3.com'})
MERGE (z:Domain {name:'domain6.com'})
MERGE (a)-[:CAME_FROM]->(f)
MERGE (f)-[:REFERRED_BY]->(e)
MERGE (e)-[:REFERRED_BY]->(d)
MERGE (d)-[:REFERRED_BY]->(z)
WITH a, 2016 AS y 
MATCH (year:Year {value: y})
WITH a, year, 5 AS m 
MATCH (year)-[:CONTAINS]->(month:Month {value: m})
WITH a, month, 9 AS d 
MATCH (month)-[:CONTAINS]->(day:Day {value: d})
WITH a, day, 10 AS h 
MERGE (day)-[:CONTAINS]->(hour:Hour {value: h})
MERGE (a)-[:HAPPENED_ON]->(hour)

So with the same query above one more referrer was added which to my 
opinion shouldnd happen because of the different time (hour) node related 
to the tracking node:

[image: enter image description here] <http://i.stack.imgur.com/CrlP9.jpg>

Referrer relations are shown in spite the tracking was connected to a 
different hour node! What did i do wrong? For me domain 6 shouldn't be 
visible because the related tracking was not connected with that time 
node... Someone has an idea?

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to neo4j+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to