从 csv 导入时使用关系变量

Using variables for relationsships while importing from csv

我想将一个项目从 SQL 图形数据库 'emulation' 迁移到 neo4j,现在我卡住了。我有一个 table,其中包含 100000 多行,形式为 source_id、relationship_type、target_id。 这是导入语句:

LOAD CSV WITH HEADERS FROM
'file:///usr/local/n4jinput/special_semrelations.csv' AS line
WITH line
MATCH (s:SemObject {sem_id: TOINT(line.ool_source_id)})
MATCH (t:SemObject {sem_id: TOINT(line.ool_target_id)})
CREATE (s)-[line.rlt_relation]->(t)

问题出在创建语句中。检索 [:WHATEVER_IS_IN_THE_CSV] 的正确语法是什么?由于我有几十种关系类型,我需要在这里使用某种变量...如果这在 CYPHER 中是不可能的,还有其他有效的方法吗?

关系类型不能在 Cypher 中参数化或动态指定。如果您有一组已定义的关系类型,则有一个解决方法。您可以使用 CASE 语句比较关系类型,如果关系类型匹配则填充数组,然后遍历数组以创建正确的关系类型:

LOAD CSV WITH HEADERS FROM 'file:///myfile.csv' AS line
MATCH (s:SemObject {sem_id: TOINT(line.ool_source_id)})
MATCH (t:SemObject {sem_id: TOINT(line.ool_target_id)})
WITH s,t, 
  CASE WHEN line.rlt_relation = "MEMBER_OF" THEN [1] ELSE [] END AS member_of,
  CASE WHEN line.rlt_relation = "BELONGS_TO" THEN [1] ELSE [] END AS belongs_to
FOREACH (x IN member_of | CREATE (s)-[:MEMBER_OF]->(t))
FOREACH (x IN belongs_to | CREATE (s)-[:BELONGS_TO]->(t))