Neo4j的。从两个表创建图表

时间:2015-06-03 06:48:25

标签: 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 MERGE (j:J {word2 : line[1]}) WITH g,j MERGE (g)-[:From_To]->(j);

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

我希望得到类似http://joxi.ru/1A5QX6MH6LZ1AE

的内容

1 个答案:

答案 0 :(得分:0)

您将J标签分配给第一列中的所有节点,并将big标签分配给第二列中的所有节点。由于每个字都有一个标识符(例如faceWord),因此对所有字词使用一个标签,例如: 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); 请尝试以下方法:

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文件,您可以指定一个额外的标签,指示该单词是形容词还是名词:

FOREACH

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

中记录的LOAD CSV技巧

如果您的图表超过少数几个节点,请考虑在运行CREATE INDEX ON :Word(word) 之前使用创建索引:

+ (id)validateNullFields:(id)value{

    if (value != NULL && ![value isKindOfClass:[NSNull class]]) {
        return  value;
    }

    return nil;
}