2014-09-02 2 views
0

Я пытаюсь получить csv в Neo4j. Поскольку он состоит из записей журнала, я хотел бы связать узлы с NEXT-указателем/отношением, когда соответствующие журналы были созданы в последующие моменты времени.Создать отношения между последовательными узлами (атрибут даты) в Neo4j

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) 

Последние четыре строки не работают. Я пытаюсь получить самую раннюю запись «c» из группы записей «b» с большей меткой времени, чем «a». Может кто-нибудь помочь мне здесь?

ответ

1

Не уверен, правильно ли я понял ваш вопрос: у вас есть файл csv, содержащий записи журнала с меткой времени. Каждая строка содержит одну запись. Вы хотите связать события, чтобы сформировать связанный список на основе временной метки?

В этом случае я бы разделить процесс на два этапа:

  1. с использованием LOAD CSV создать узел с data свойства для каждой линии
  2. затем соединяют записи, используя, например, a cypher заявление вроде этого:

.

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)))) 
+0

Спасибо, Стефан, это решило мою проблему. Я, вероятно, не обойдусь, изучая Cypher правильно ... – Damian