Csv 在neo4j中的多个节点之间创建多个关系
我有一个CSV文件,其标题如下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
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