根据neo4j中的csv中的列值创建边

时间:2019-04-04 17:38:20

标签: neo4j cypher

我有两个csv文件。第一个“ user_features.csv”包含“节点”及其14个功能,如下所示:

node_id,f1,f2,f3,f4,....f13 

1045,   2, 3,  4, 5,.... 31    
5042,   1, 2,  3, 4,.....25

我可以使用以下命令将其加载到Neo4j中:

using commit periodic 10000
load csv with headers from "file:///user_features.csv" as linecsv
create (n:user_features {name: linecsv.node_id, f1: linecsv.f1 .....})

现在,我还有一个名为“ train.csv”的文件,其数据具有以下形状:

node1_id,node2_id,is_related

1045,5042,1  
1045,134,0

此处“ is_related”字段表明node1_id和node2_id之间存在连接。

我想使用此数据在加载的图上建立关系。但是我不明白如何使用“ is_related”字段的值。在这种情况下,Where子句会有所帮助吗?

还有另一种方法,通过对图形数据库中的“ is_related”字段= 1进行过滤,可以修改“ train.csv”文件。

但是是否可以使用'is_related'列的值在图上的node1和node2之间创建边?

1 个答案:

答案 0 :(得分:1)

如果您应该对CSV文件不做任何操作,而它们的is_related值却为0,这似乎很奇怪。为什么不只保留这些行(并完全消除is_related列)?

但是,如果您确实只想在RELATED_TO为1时创建is_related关系,则可以执行以下操作:

LOAD CSV WITH HEADERS FROM "file:///train.csv" AS row
WITH row
WHERE row.is_related = 1
MATCH (n:user_features {name: row.node1_id}), (m:user_features {name: row.node2_id})
MERGE (n)-[:RELATED_TO]->(m)

此外,如果您在:user_features(name)上有index,则此查询会更快。