【发布时间】:2018-09-20 16:45:06
【问题描述】:
我有一个包含这种格式关系的文件:
!comment
!comment
nodeID nodeName edgeType nodeID
nodeID nodeName edgeType nodeID
nodeID nodeName edgeType nodeID
我想将该文件的节点和边导入到我的 neo4j 数据库中。
我尝试了以下步骤:
- 在节点 ID 上创建唯一约束
- 读取文件,跳过注释行,从每行创建唯一节点(如果节点已存在则跳过行)
- 读取文件,跳过注释行,从每一行创建边
// Each node id is unique
CREATE CONSTRAINT ON (n:Node) ASSERT n.id IS UNIQUE
// For each row not starting by "!", create node if it doesn't exist
LOAD CSV FROM "file:///relationships.tsv" AS row
FIELDTERMINATOR '\t'
WITH row
WHERE NOT row =~ '^!.*'
CREATE (:Node {id: row[0], name: row[1]})
// For each row not starting by "!", create edge
LOAD CSV FROM "file:///relationships.tsv" AS row
FIELDTERMINATOR '\t'
WITH row
WHERE NOT row =~ '^!.*'
MATCH (n:Node), (m:Node)
WHERE n.id = row[0] AND m.id = row[3]
WITH n, m, row
CASE row[2]
WHEN 'F' THEN
CREATE UNIQUE (m)-[:Edge {type: 'friend'}]->(n)
WHEN 'P' THEN
CREATE UNIQUE (m)-[:Edge {type: 'partner'}]->(n)
END
上面的代码不起作用。作为密码新手,我不确定自己做错了什么。我希望最终合并步骤 2 和 3 以读取文件一次并完成它。如何有效地导入这些数据?
【问题讨论】:
-
你能解释一下什么不起作用吗?导入后有结果吗?
-
正则表达式不起作用,因为 row 是字符串列表。