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;
сказать тебе?