将 CSV 数据中的关系加载到 neo4j 数据库中

Loading relationships from CSV data into neo4j db

Neo4j 2.1.7

正在尝试通过我在 CSV 中收到的信息大量连接一堆节点,看起来像:

person_id,book_id,relationship
111,AAA,OWNS
222,BBB,BORROWS
333,AAA,BORROWS

此 CSV 中使用的节点 :Person:Book 已通过 LOAD CSVCREATE 语句成功加载,并且已存在于数据库中。现在,我想在 :Person:Book 之间的关系的 CSV 上方加载这个。这些关系在 CSV 本身中定义。

LOAD CSV WITH HEADERS FROM "file:data.csv" AS row
MATCH (person:Person { personID: row.person_id })
MATCH (book:Book { bookID: row.book_id })

当然,如果我提供特定名称([:OWNS][:BORROWS] 等),下一个 MERGE 命令会起作用,但如您所见,我的关系由传入数据。

但是,我希望 MERGE 中定义的关系不是 "hard-coded" 字符串,而是来自我的 CSV 的第 3 列的数据。大致如下:

MERGE (person)-[row.relationship]->(book)

这可能吗?

PS:我试过上面的语法,也试过-[:row.relationship]->,都无济于事(语法错误)

我认为加载 CSV 是不可能的。您需要对输入数据和集合做一些小技巧。如果输入 csv 中的关系包含 OWNS 创建一个集合,否则创建一个空集合。对 BORROWS 关系值执行相同的操作。会是这样的...

...
case when row.relationship = "OWNS" then [1] else [] end as owns
case when row.relationship = "BORROWS" then [1] else [] end as borrows
foreach(x in owns | MERGE (person)-[:OWNS]->(book))
foreach(x in borrows | MERGE (person)-[:BORROWS]->(book))
...