Csv 在neo4j中的多个节点之间创建多个关系

Csv 在neo4j中的多个节点之间创建多个关系,csv,graph,neo4j,Csv,Graph,Neo4j,我有一个CSV文件,其标题如下 Relationshiptype source target Causative_of Absorb_heat Apply_heat Inheritance Absorb_heat Transition ReFraming_Mapping Transition

我有一个CSV文件,其标题如下

Relationshiptype         source                     target
Causative_of             Absorb_heat                Apply_heat
Inheritance              Absorb_heat                Transition
ReFraming_Mapping        Transition                 Transitionstate
我必须创建此源和目标之间的关系,并且此源和目标之间的关系将为“relationshiptype”

我试过:

LOAD CSV WITH HEADERS FROM "file:///output.csv" AS line
CREATE (sub:Source {name:line.source})
CREATE (sup:Target {name:line.target})
CREATE (sub)-[:Causative_of]->(sup)
CREATE (sub)-[: Inheritance]->(sup)
CREATE (sub)-[: ReFraming_Mapping]->(sup)

RETURN sub,sup;
但这是行不通的。它随机创建源和目标之间的关系


我找不到任何方法来建立这种多重关系。有没有办法做到这一点?请帮助。

有几个问题:

1) 由于节点可以重复,因此应使用
MERGE
而不是
CREATE
来添加新节点:

MERGE (sub:Source {name:line.source})
2) 由于节点既可以是源,也可以是目标,因此不适合使用不同的标签。使用一个,例如

MERGE (sub:Item {name:line.source})
3) 在查询中,您可以同时创建三种类型的关系,尽管您需要使用输入数据中的关系类型。问题是,目前无法通过
neo4-cyper
中的变量设置关系类型。而且也没有条件分支。因此,您可以对
FOREACH
[]使用以下技巧:

4) 这不是很好而且效率很高,因此您可以使用
APOC
库[]中的
create.relationship
函数:


我不明白你所说的“随机建立关系”是什么意思。您的查询指定它将创建源和目标之间的3个关系中的每一个,这不是随机的。输出类似于
absold\u heat--causiver\u of------->Apply\u heat、、、、、、、、、、、、,,吸收热量---继承----->在输出中应用热量
源和目标之间的关系随机创建关系。但这不是我想要的。我希望源和目标创建类似于CSV文件中提到的“关系类型”的关系@逆法尔康
LOAD CSV WITH HEADERS FROM "file:///output.csv" AS line
MERGE (sub:Item {name:line.source})
MERGE (sup:Item {name:line.target})
FOREACH(ift in CASE WHEN line.Relationshiptype="Causative_of" THEN [1] ELSE [] END |
  CREATE (sub)-[:Causative_of]->(sup)
)
FOREACH(ift in CASE WHEN line.Relationshiptype="Inheritance" THEN [1] ELSE [] END |
  CREATE (sub)-[:Inheritance]->(sup)
)
FOREACH(ift in CASE WHEN line.Relationshiptype="ReFraming_Mapping" THEN [1] ELSE [] END |
  CREATE (sub)-[:ReFraming_Mapping]->(sup)
)
RETURN sub, sup
LOAD CSV WITH HEADERS FROM "file:///output.csv" AS line
MERGE (sub:Item {name:line.source})
MERGE (sup:Item {name:line.target})
WITH sub, sup, line
CALL apoc.create.relationship(sub, line.Relationshiptype, NULL, sup) YIELD rel
RETURN sub, rel, sup