Neo4j: создать отношения между двумя или более узлами, имеющими одну и ту же метку

У меня есть CSV-файл, содержащий деятельность (график процесса):

startActivityId,Name,endActivityId
 1,A,2
 2,B,3
 3,C,4
 4,D,5

так что это будет выглядеть так: A->B->C->D я успешно импортировал файл csv на сервер neo4j: используя этот запрос Cypher:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:path/graph/activity.csv" AS row
CREATE (:Activity {startactivityId:row.startActivityId, Name: row.Name, endActivityId: row.endActivityId});

Затем я создал индекс на startactivityId:

CREATE INDEX ON :activity(startActivityId);

Затем я хочу создать отношения между этими узлами, поэтому попробовал этот запрос шифра:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:path/graph/activity.csv" AS row
MATCH (startActivity:Activity {startActivityId: row.startActivityId})
MATCH (endActivity:Activity {startActivityId: row.endActivityId})
MERGE (startActivity)-[:LINKS_TO]->(endActivity);`

но никаких отношений не создано, ничего не происходит

Я уверен, что что-то пропустил, потому что я новичок в Cypher, но я не могу понять это.

есть идеи?

1 ответ

Решение

Я скопировал ваш обновленный csv (и удалил пробелы в заголовке первого столбца) и запустил ваши запросы.

neo4j-sh (?)$ USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///Users/jonatan/src/doc/stackexchange/32225817.pdc" as row CREATE (:Activity {startActivityId:row.startActivityId, name:row.Name, endActivityId:row.endActivityId});                                            
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Properties set: 12
Labels added: 4
115 ms

neo4j-sh (?)$ USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///Users/jonatan/src/doc/stackexchange/32225817.pdc" as row MATCH (s:Activity {startActivityId:row.startActivityId}) MATCH (e:Activity {startActivityId:row.endActivityId}) MERGE (s)-[r:LINKS_TO]->(e) RETURN r;
+-------------------+
| r                 |
+-------------------+
| :LINKS_TO[2084]{} |
| :LINKS_TO[2085]{} |
| :LINKS_TO[2086]{} |
+-------------------+
3 rows
Relationships created: 3
178 ms

Три отношения созданы. Чтобы подтвердить, что это правильные отношения, я сопоставляю и возвращаю путь (:Activity)-[:LINKS_TO]->(),

neo4j-sh (?)$ MATCH p=(:Activity)-[:LINKS_TO]->() RETURN p;         
+-------------------------------------------------------------------------------------------------------------------------------------------+
| p                                                                                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| [Node[1415]{name:"A",startActivityId:"1",endActivityId:"2"},:LINKS_TO[2084]{},Node[1416]{name:"B",startActivityId:"2",endActivityId:"3"}] |
| [Node[1416]{name:"B",startActivityId:"2",endActivityId:"3"},:LINKS_TO[2085]{},Node[1417]{name:"C",startActivityId:"3",endActivityId:"4"}] |
| [Node[1417]{name:"C",startActivityId:"3",endActivityId:"4"},:LINKS_TO[2086]{},Node[1418]{name:"D",startActivityId:"4",endActivityId:"5"}] |
+-------------------------------------------------------------------------------------------------------------------------------------------+
3 rows
49 ms
neo4j-sh (?)$ 

Это выглядит нормально для меня, не уверен, что не работает для вас.

Что значит MATCH p=(:Activity)-[r]->() RETURN p; сказать тебе?

Другие вопросы по тегам