Neo4j。从两个表创建图形

Neo4j. Create graph from two tables

我有两个包含节点和边的 csv 文件。

nodes:

big, adjective
arm, noun
face, noun,
best, adjective

edges:
big, face
best, friend
face, arm

我想创建具有边关系的图并添加节点组:名词和形容词。

我使用这个命令来创建关系:

LOAD CSV FROM 'file:copperfield_edges.csv' AS line MERGE (g:G {word1 : line[0]}) WITH line, g MERGE (j:J {word2 : line[1]}) WITH g,j MERGE (g)-[:From_To]->(j);

但在这种情况下,每个单词出现两次。我怎样才能只做唯一的单词关系并添加名词和形容词组?

我想要这样的东西http://joxi.ru/1A5QX6MH6LZ1AE

您将 G 标签分配给第一列中的所有节点,并将 J 标签分配给第二列中的所有节点。由于每个单词都有一个标识符(例如 bigface),因此对所有单词使用一个标签,例如Word 请尝试以下操作:

LOAD CSV FROM 'file:copperfield_edges.csv' AS line 
MERGE (g:Word {word : line[0]}) 
MERGE (j:Word {word : line[1]}) 
MERGE (g)-[:From_To]->(j);

根据您的节点 csv 文件,您可以分配一个额外的标签来指示该词是形容词还是名词:

LOAD CSV FROM 'file:nodes.csv' AS line
MERGE (w:Word {word: line[0]})
FOREACH (n in (CASE WHEN line[1] = "adjective" THEN [1] ELSE [] END) | 
 set w :Adjective  )
FOREACH (n in (CASE WHEN line[1] = "nound" THEN [1] ELSE [] END) | 
 set w :Noun  )

由于您无法动态设置标签,我不得不使用 http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/

中记录的 FOREACH 技巧

如果您的图表中有多个节点,请考虑在 运行 LOAD CSV:

之前创建索引
CREATE INDEX ON :Word(word)