在Neo4j中,有没有办法使用loadcsv动态读取关系名称?

时间:2015-03-29 07:18:40

标签: neo4j cypher

我使用Cypher使用LOAD CSV方法创建了节点。下一部分是与节点建立关系。为此,我有以下格式的CSV

fromStopName,from,route,toStopName,to
Swargate,1,route1_1,Swargate Corner,2
Swargate Corner,2,route1_1,Hirabaug,3
Hirabaug,3,route1_1,Maruti,4
Maruti,4,route1_1,Mandai,5

现在我希望将“route”名称作为节点之间的关系。所以,我在CYPHER中使用以下LOAD CSV命令

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:C:\\\\busroutes.csv" AS row
MATCH(f {name:row.fromStopName}),(t {name:row.toStopName}) CREATE f - [:row.route]->t

但看起来,我做不到。相反,如果我静态地命名关系然后从csv路由字段分配属性,它就可以工作。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:C:\\\\busroutes.csv" AS row
MATCH(f {name:row.fromStopName}),(t {name:row.toStopName}) CREATE f - [:CONNECTS {route: row.route}]->t

我想知道这是否被禁用以强制执行具有“纯粹”动词类型关系的良好做法并避免创建相同关系的多样性。例如“由1_1连接”“由1_2连接”。

或者我只是找不到正确的链接或使用正确的语法。感谢帮助!

1 个答案:

答案 0 :(得分:1)

现在你不能,因为这是结构信息。

  • 为此使用neo4j-import tool
  • 或者每种类型使用一个CSV文件并拼出rel-type。
  • 甚至可以过滤CSV并进行多次传递:

e.g。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:C:\\\\busroutes.csv" AS row
with row where row.route = "route1_1"
MATCH(f {name:row.fromStopName}),(t {name:row.toStopName}) 
CREATE (f)-[:route1_1]->(t)

还有一个使用假条件的技巧,但你仍然需要拼出它们。