Neo4j cypher-导入CSV并基于CSV值添加节点之间的关系

Neo4j cypher-导入CSV并基于CSV值添加节点之间的关系,neo4j,cypher,Neo4j,Cypher,在cypher中,是否可以使用导入功能基于csv的值在节点之间创建不同的关系 例如: 对于给定的csv数据 product_id user_id action 1 1 VIEW 1 2 PURCHASE 我需要根据csv中“操作”字段的值,创建产品节点(产品id)、用户节点(用户id)以及“用户”和产品节点之间的查看或购买关系 下面是我尝试过的方法。我知道语法是不正确的,但我只是想告诉大家我想做什么 USING PERIO

在cypher中,是否可以使用导入功能基于csv的值在节点之间创建不同的关系

例如: 对于给定的csv数据

product_id  user_id  action
1           1        VIEW
1           2        PURCHASE
我需要根据csv中“操作”字段的值,创建产品节点(产品id)、用户节点(用户id)以及“用户”和产品节点之间的查看或购买关系

下面是我尝试过的方法。我知道语法是不正确的,但我只是想告诉大家我想做什么

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file://pathto/product-event.csv" AS csvLine 
FIELDTERMINATOR ','
MERGE ( prod:Product{pid: toInt(csvLine.product_id)} )
MERGE ( usr:User { cid: toInt(csvLine.userid)  })
WITH prod,usr , CASE  
    WHEN csvLine.action ='VIEW' THEN  'VIEW'
    WHEN csvLine.action ='PURCHASE' THEN  'PURCHASE'
    ELSE 'VIEW' END AS action
MERGE (usr)-[:action]->(prod)



USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///pathto/product-event.csv" AS csvLine 
FIELDTERMINATOR ','
MERGE ( prod:Product {pid: toInt(csvLine.productid) } )
MERGE ( usr:User { cid: toInt(csvLine.userid) }
    )
ON CREATE SET 
    prod.created=timestamp()
WHERE csvLine.action = 'VIEW'
MERGE (cust)-[:VIEW]->(prod)
WHERE csvLine.action = 'PURCHASE'
MERGE (usr)-[:PURCHASE]->(prod)

也许有简单的方法可以做到这一点。但我没有在网上得到任何参考资料。谢谢。

您不能有动态关系类型。但是,有一种解决方法是有条件地用1或0个元素填充数组,然后应用
FOREACH

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file://pathto/product-event.csv" AS csvLine 
FIELDTERMINATOR ','
MERGE ( prod:Product{pid: toInt(csvLine.product_id)} )
MERGE ( usr:User { cid: toInt(csvLine.userid)  })
FOREACH(ignoreMe IN CASE WHEN csvLine.action='VIEW' THEN [1] ELSE [] END | 
    MERGE (usr)-[:VIEW]->(prod) )
FOREACH(ignoreMe IN CASE WHEN csvLine.action='PURCHASE' THEN [1] ELSE [] END | 
    MERGE (usr)-[:PURCHASE]->(prod) )

另请参见。

不完全是您想要的,但可能有效:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file://pathto/product-event.csv" AS csvLine      
FIELDTERMINATOR ',' 
MERGE ( prod:Product{pid: toInt(csvLine.product_id)} )   
MERGE ( usr:User { cid: toInt(csvLine.userid)  }) 
MERGE (usr)-[:action {type: csvLine.action}]->(prod) )