neo4j desktop导入csv数据

参考:
https://neo4j.com/developer/desktop-csv-import/

1. 将csv文件放到指定位置

neo4j desktop导入csv数据_第1张图片
neo4j desktop导入csv数据_第2张图片
neo4j desktop导入csv数据_第3张图片

2.打开终端

neo4j desktop导入csv数据_第4张图片
如果是windows下的话,最好采取以下命令

bin\\cypher-shell
# 使用双斜杠,不然会报错找不到路径

neo4j
# 然后输入对应的用户名和密码即可

neo4j desktop导入csv数据_第5张图片
执行的其实就是这个dbms目录下的这个脚本
neo4j desktop导入csv数据_第6张图片

另外可以看到,命令行的前缀是:neo4j@mysql,用户名是neo4j,默认的图数据库是mysql。所以如果想换一个数据库导入的话,可以另外创建一个
neo4j desktop导入csv数据_第7张图片

这个命令行其实和browser那个可视化界面差不多,只不过没有文字,但是命令都是一模一样的.所以完全没必要用这个,直接用browser好了。

3. 检查数据

一般导入数据之前,要先看一下数据大概多少行,确认一下有没有表头

//count data rows in products.csv (no headers)
LOAD CSV FROM 'file:///vetex_family.csv' AS row
RETURN count(row);

neo4j desktop导入csv数据_第8张图片
得到:

  • vetex_role: 105行
  • vertex_family: 7行
  • edge_role_famlily:105行
  • edge_role_role:188行
LOAD CSV FROM 'file:///vetex_family.csv' AS row
RETURN row
LIMIT 3;

另外,也可以浏览一下数据
neo4j desktop导入csv数据_第9张图片

4. 构建数据模型

可以大致看一下这部分的描述:Graph data model

  • 一个是csv的格式,节点(实体)是一个csv文件;关系是一个csv文件。
  • 另外,如果节点类型中包含类似ID这种东西,那么可以考虑加入一个唯一性限制(来约束实体完整性)
  • 注意:约束可以在没有数据的时候就加入。。

4.1 建立约束

关于约束的文档,参考:1. Syntax for creating constraints

# 确定好节点类别的名称(建议首字母大写)
CREATE CONSTRAINT UniqueRole ON (p:Role) ASSERT p.id IS UNIQUE;
CREATE CONSTRAINT UniqueFamily ON (o:Family) ASSERT o.id IS UNIQUE;

可以使用show index或者show UNIQUE constraint来查看建立好的约束
在这里插入图片描述
neo4j desktop导入csv数据_第10张图片
看起来都差不多

如果不小心写错约束的名称,需要删了重新建立。。。

DROP CONSTRAINT UniqueProduct IF EXISTS
DROP CONSTRAINT UniqueOrder IF EXISTS

neo4j desktop导入csv数据_第11张图片

4.2 建立数据模型

关于这里的merge和set语法,可以参考:3.1. Merge with ON CREATE

LOAD CSV FROM 'file:///vetex_role.csv' AS row
WITH row[0] AS roleId, row[1] AS roleName, row[2] AS roleAlias
MERGE (p:Role {roleId: roleId})
  SET p.roleName = roleName, p.roleAlias = roleAlias
RETURN count(p);

neo4j desktop导入csv数据_第12张图片
可以看到,导入成功,而且直接就可以搜索到。
类似的,

LOAD CSV FROM 'file:///vetex_family.csv' AS row
WITH row[1] AS familyId, row[0] AS familyName
MERGE (p:Family {familyId: familyId})
  SET p.familyName = familyName
RETURN count(p);

neo4j desktop导入csv数据_第13张图片


导入关系csv

:auto USING PERIODIC COMMIT 500
# 如果数据量很大,使用上面语句每次提交500条数据
LOAD CSV WITH HEADERS FROM 'file:///edge_role_famlily.csv' AS row
# 如果有表头 就使用 WITH HEADERS

LOAD CSV FROM 'file:///edge_role_famlily.csv' AS row
WITH row[0] AS roleId, row[1] AS familyId
MATCH (p:Role {roleId: roleId})
MATCH (o:Family {familyId: familyId})
MERGE (p)-[rel:BelongToFamily]->(o)
RETURN count(rel);

也可以查看一下这个关系:

MATCH (r:Role)-[rel:BelongToFamily]->(f:Family)
RETURN r, rel, f LIMIT 50;

neo4j desktop导入csv数据_第14张图片
就很完美。

类似的,如果关系也有属性,可以使用以下方式导入

LOAD CSV FROM 'file:///edge_role_role.csv' AS row
WITH row[0] AS roleId, row[1] AS roleId2,row[2] as type
MATCH (p:Role {roleId: roleId})
MATCH (o:Role {roleId: roleId2})
MERGE (p)-[rel:KindShip {type:type}]->(o)
RETURN count(rel);

插入后再查看关系

MATCH (r:Role)-[rel:KindShip]->(r2:Role)
RETURN r, rel, r2 LIMIT 50;

neo4j desktop导入csv数据_第15张图片
注意,这里允许type属性为空。

你可能感兴趣的:(知识图谱,neo4j)