如何通过在neo4j中导入的csv文件创建唯一的节点和关系?

时间:2014-08-01 23:48:13

标签: neo4j cypher

你好我试图在我的ubuntu 12.04中将csv文件中的一些数据导入neo4j。

csv文件是一个双列数据文件,没有标题,其格式如下:

12ffew3213,232rwe13
12ffew3213,5yur2ru2r
rwerwerw3,432rwe13
rwerwerw3,5yur2ru2r

事物是第0行和第1行中的数据不唯一,例如数据可能是3000行,并且只有100个唯一的row0值和300个唯一的row1值。

我想构建一个图表,其中包含100个row0节点和300个row1节点以及这些节点之间的3000个关系(如果12ffew3213,232rwe13出现两次,则有2个边缘)。

因为我是neo4j和Cypher的新手。在尝试使用CREATE和MERGE一段时间之后,我仍然无法构建UNIQUE节点。我使用了像

这样的东西
LOAD CSV FROM 'file:///home/nate/Downloads/file.csv' AS line
MERGE (:A { number: toString(line[0])})-[:LIKES]->(:B { ID: toString(line[1])})

任何想法 - 谢谢你!

2 个答案:

答案 0 :(得分:12)

这是你做的。

LOAD CSV FROM 'file:///home/nate/Downloads/file.csv' AS line
MERGE (n:A {number : line[0]})
WITH line, n
MERGE (m:B {ID : line[1]})
WITH m,n
MERGE (n)-[:LIKES]->(m);

首先创建或匹配:A节点,然后创建或匹配:B节点,然后创建或匹配关系。 WITH子句收集序列中每个点的结果,以便在下一个中使用。要详细了解WITH条款,请阅读Section 9.5 in the Neo4j Manual

答案 1 :(得分:0)

对于带有标题的 csv 也是如此。如果我们的标题是 'head1','head2' 我们的代码将是:

LOAD CSV WITH HEADERS FROM 'file:///home/nate/Downloads/file.csv' AS line
MERGE (n:A {number : line.head1})
WITH line, n
MERGE (m:B {ID : line.head2})
WITH m,n
MERGE (n)-[:LIKES]->(m);