目录
Neo4j数据导入5种方式
1、使用Cypher语言创建
1.1 创建节点【create】
1.2 修改节点的属性
1.3 创建带属性值的节点
1.4 创建节点间的关系
1.5 其他操作命令
1.6 cypher查询语言的使用规律
2、使用load csv导入数据
2.1 构建容器(非必须)
2.2 导入节点csv文件
2.3 创建索引并删除重复节点
2.4 导入关系csv文件
3、使用neo4j-admin导入数据
3.1 数据导入前的准备工作
3.2 数据预处理
3.3 数据导入
3.4 查看知识图谱
4、总结
Neo4j数据导入5种方式
neo4j的数据导入方式有很多,总结起来总共分为以下5种:
- Cypher CREATE 语句,为每一条数据写一个CREATE
- Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
- 官方提供的Java API —— Batch Inserter
- 大牛编写的 Batch Import 工具
- 官方提供的 neo4j-import 工具
物种方式的优缺点对比:
1、使用Cypher语言创建
1.1 创建节点【create】
第一种方式: merge(n:洛杉矶湖人) # 节点不存在,则创建,存在,则忽略。
第二种方式: create(n:洛杉矶湖人) # 不管节点存不存在,创建
效果就是,洛杉矶湖人这类的节点,一共被创建了两次,因此,查询的时候,会出现两个Node。虽然上面我们创建了两个节点,但是这两个节点除了系统给的唯一id外,没有其他属性,下面我就基于这两个节点,分别对它们进行“update”,赋予节点意义。
1.2 修改节点的属性
首先:查询ID等于21798的Node
其次:给该Node添加三个属性,分别是label(节点标签名),height(身高),position(场上位置)
neo4j查询节点用:match == 相当于关系型数据库的select,相当于非关系数据库mongodb的find
neo4j修改节点属性用:set == 相当于关系型数据库的update…set…
类似sql语句: update n set label = ‘科比’,height=198,position=’得分后卫’ where id = 21798
区别:关系型数据库如果字段不存在的话会 错,而NoSql数据库neo4j,如果属性字段不存在的话,就添加
执行后,效果如下:
1.3 创建带属性值的节点
我们使用create创建另一位湖人传奇巨星奥尼尔这个节点,语句如下:
效果如下:
1.4 创建节点间的关系
构成一条关系最基本的要素是要有两个对象,放在neo4j图库中就是,两个节点,一条边,才能称作是一个完整的关系。创建统一用create命令,而关系的创建,实际上和创建节点差不多,唯一区别就是,关系是有方向的,而且关系用‘[]’表示,而节点用’()’表示。
下面我给目前尚存在的两个节点,科比和奥尼尔创建一条关系,关系的name叫“搭档”,这种关系,不区分方向,因此,无所谓谁是startNode,谁是endNode。
解释一下:
1、首先匹配找到节点n和b,也就是科比和奥尼尔代表的节点Node;
2、然后创建节点n到节点b的关系r,r有三个属性,一个是从哪一年开始since,一个是关系描述des,另一个是合作拿过的冠军数量champion;
3、最后返回n,r,b 完整节点之间的关系结果,table数据如下,总过三列:
最终,创建的graph图效果如下:
1.5 其他操作命令
如果要修改关系的属性,和修改节点的属性一样,修改关系的属性也用set,如修改id等于12513的关系的属性des为“小飞侠&大鲨鱼”的语句如下:
如果要删除节点间的关系,删除统一用命令delete,和删除节点一样,删除关系的语句如下:
如果要查询科比和奥尼尔之间的关系,则语句如下:
如果要创建索引,语法:
为节点标签洛杉矶湖人基于属性label创建索引,语句如下:
删除索引:
1.6 cypher查询语言的使用规律
其实使用cypher语言来查询还是非常简单的,因为不管你查什么,查的无外乎节点、关系、节点间的关系,用表达式表示就是:(n)-[r]-(b),掌握以下规律,你就可以快速掌握如何使用Cypher语言。
结合表达式: match(n)-[r] -(b)
如果查询节点n 就 return n
如果查询关系r 就 return r
如果查询节点b 就 return b
如果查询节点n和b之间的关系r 就 return n,r,b
如果查询带条件 就 where n.x = x,r.xx = xx,b.xxx = xxx
如果修改属性 就 where….. set ….
如果删除属性 就 where….. remove …..
如果删除节点或关系 就 where….. delete n 或者 delete r 或者 delete b 或者 delete n , r , b
2、使用load csv导入数据
2.1 构建容器(非必须)
docker环境下安装:这里说明下,默认将容器的/data,/var/lib/neo4j/import目录映射到宿主机。/data存储的是数据,/var/lib/neo4j/import存储的是你想要导入数据的
初次进行大批量数据的导入有很多方式,但是每种方式都会有自己的局限性。这里是官 文档。
2.2 导入节点csv文件
通过cypher-shell命令行直接导入数据。这样的方式,可以不停用neo4j服务,直接导入到库中。
USING PERIODIC COMMIT 1000,是满足1000条之后,提交一个事务,这样能够提高效率。
2.3 创建索引并删除重复节点
导入节点之后,我们必然会导入关系。这里就有个坑,如果你在node节点的库里,没有创建index,那么导入关系的时候,将会慢的要死。
2.4 导入关系csv文件
3、使用neo4j-admin导入数据
通过neo4j-admin方式导入的话,需要暂停服务,并且需要清除graph.db,这样才能导入进去数据。而且,只能在初始化数据时,导入一次之后,就不能再次导入了。所以这种方式,可以在初次建库的时候,导入大批量数据,等以后如果还需要导入数据时,可以采用上边的方法。
3.1 数据导入前的准备工作
对于大规模的数据集,使用语句插入和load csv的时候往往非常缓慢,当需要插入大量三元组时,可以考虑使用Neo4j-import的方式。这种方式有许多注意点:
3.2 数据预处理
neo4j-import官方要求的数据格式为csv文件,主要就是分成两个文件entity.csv 和relationship.csv。
其中entity.csv中包含了实体的id,实体的name,以及标签LABEL,具体格式如下:
relationship.csv文件包含了起始节点id,结束节点id,关系的name,以及标签LABEL,具体格式如下:
需要将导入的数据转换成这样的两个格式的csv文件,才能够导入Neo4j中。
3.3 数据导入
csv数据文件准备好后,可以通过执行以下脚本来实现数据导入:
- #导入命令
- # 停止neo4j服务
-
neo4j stop
- # 如果是Linux可以进入到databases目录下删除数据库,windows直接删除即可
-
cd /usr/local/Cellar/neo4j/3.5.0/libexec/data/databases
-
rm -rf graph.db
- # 执行数据导入命令neo4j-admin
-
neo4j-admin import
-
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!