首页 文章

导入从CSV到Neo4J的关系 - 无法创建多个关系

提问于
浏览
2

我有简单的大型CSV文件,没有 Headers ,结构如下:

name1, name2 name3, name4 name2, name4 ...

我'm trying to import it all to Neo4J and create the relationships at the same time. First I'已添加约束 CREATE CONSTRAINT ON (u:User) ASSERT u.name IS UNIQUE 然后我跑了:

USING PERIODIC COMMIT
LOAD CSV FROM '${file}' AS line
WITH line LIMIT 50000
MERGE (u:User {name: line[0]})-[:connected_to]->(q:User {name: line[1]})

我得到的图只是连接对 . 我找不到具有多个关系的单个节点(即使许多节点在左右列中多次出现) . 此外,我希望看到一些集群 .

显然我的插入有问题 . 我假设我可以运行两次文件并创建所有节点,然后创建所有关系,但我觉得我错过了一些简单的东西,可以在一个操作中完成所有操作 .

Correction: 有一个属性名称为'number' - 它们都是'name' .

1 回答

  • 2

    您需要先单独创建条目 . MERGE 将确保创建整个模式 . 因此,您只能获得与文件的每一行匹配的对 .

    如果您首先在行中的每个名称 MERGE 然后 MERGE 之后的关系,您将获得所需的连接图 . 请注意,MERGE的关系是无向的 . 这将确保在两个特定节点之间仅创建单个关系,而不管文件中的顺序或出现次数 .

    USING PERIODIC COMMIT
    LOAD CSV FROM '${file}' AS line
    WITH line LIMIT 50000
    MERGE (u:User {name: trim(line[0])} )
    MERGE (q:User {name: trim(line[1])} )
    MERGE (u)-[:connected_to]-(q)
    

    如果包含与此类似的条目的数据以不同的顺序重复并希望在两个方向上创建关系,那么您可以 Build 关系MERGE指示

    ...
    name1, name2
    name2, name1
    ...
    

    如下例所示

    USING PERIODIC COMMIT
    LOAD CSV FROM '${file}' AS line
    WITH line LIMIT 50000
    MERGE (u:User {name: trim(line[0])} )
    MERGE (q:User {name: trim(line[1])} )
    MERGE (u)-[:connected_to]->(q)
    

相关问题