Damian
Damian

Reputation: 139

Create Relationships between Consequent Nodes (on date attribute) in Neo4j

I am trying to get a csv into Neo4j. As it consists of log entries, I'd like to connect nodes with a NEXT-pointer/relationship when the corresponding logs have been created at subsequent times.

LOAD CSV WITH HEADERS FROM 'http://localhost/Export.csv' AS line
CREATE (:Entry { date: line[0], ...})

MATCH (n)
RETURN n
ORDER BY n:date


MATCH (a:Entry),(b:Entry),(c:Entry)
WITH p AS min(b:date) 
WHERE a:date < b:date AND c.date = p
CREATE (a)-[r:NEXT]->(c)

The last four lines do not work however. What I try is to get the earliest entry 'c' out of the group of entries 'b' with a larger timestamp than 'a'. Can anyone help me out here?

Upvotes: 0

Views: 320

Answers (1)

Stefan Armbruster
Stefan Armbruster

Reputation: 39926

Not sure if I understood your question correctly: you have a csv file containing log records with a timestamp. Each line contains one record. You want to interconnect the events to form a linked list based on a timestamp?

In this case I'd split up the process into two steps:

  1. using LOAD CSV create a node with a data property for each line
  2. afterwards connect the entries using e.g. a cypher statement like this:

.

MATCH (e:Entry) 
WITH e ORDER BY e.date DESC
WITH collect(e) as entries 
FOREACH(i in RANGE(0, length(entries)-2) | 
  FOREACH(e1 in [entries[i]] | 
    FOREACH(e2 in [entries[i+1]] |  
       MERGE (e1)-[:NEXT]->(e2))))

Upvotes: 2

Related Questions