Neo4j。从两个表创建图形

Neo4j。从两个表创建图形,neo4j,edges,Neo4j,Edges,我有两个带有节点和边的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

我有两个带有节点和边的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);
但在这种情况下,每个单词出现两次。我怎样才能只处理单词之间的独特关系,并添加名词和形容词组


我想得到这样的东西

您将
G
标签分配给第一列中的所有节点,将
J
标签分配给第二列中的所有节点。因为每个单词都有一个标识符(例如,
big
face
),所以对所有单词使用一个标签,例如,
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  )
由于无法动态设置标签,因此我不得不使用

如果您的图表超过一小部分节点,请考虑在运行<代码> >加载CSV < /C> >之前创建索引:

CREATE INDEX ON :Word(word)