目前主要有以下几种数据插入方式:
Cypher CREATE 语句,为每一条数据写一个CREATE
Cypher load csv语句,将数据转成CSV格式,通过LOAD CSV读取数据。
官方提供的Java API —— Batch Inserter
大牛编写的 BatchImport 工具
官方提供的 neo4j-import 工具
这边重点来说一下官方最快的neo4j-import
,使用的前提条件:
- graph.db需要清空;
- neo4j需要停掉;
- 接受CSV导入,而且格式较为固定;
- 试用场景:首次导入
- 节点名字需要唯一
比较适用于:首次导入、无法迭代更新
简单的Demo(数据导入之前需要停止neo4j服务)
movies.csv.
movieId:ID,title,year:int,:LABEL
tt0133093,"The Matrix",1999,Movie
tt0234215,"The Matrix Reloaded",2003,Movie;Sequel
tt0242653,"The Matrix Revolutions",2003,Movie;Sequel
其中,title是属性,注意此时需要有双引号;year:int也是属性,只不过该属性是数值型的; :LABEL
与:ID
一样生成了一个新节点,也就是一套数据可以通过:
生成双节点
actors.csv.
personId:ID,name,:LABEL
keanu,"Keanu Reeves",Actor
laurence,"Laurence Fishburne",Actor
carrieanne,"Carrie-Anne Moss",Actor
roles.csv.
其中,:LABEL
是节点的附属属性,其中personId:ID
一定是唯一的,:LABEL
可以不唯一。
而且,载入之后,:LABEL
单独会成为新的节点,而且是去重的。
:START_ID,role,:END_ID,:TYPE
keanu,"Neo",tt0133093,ACTED_IN
keanu,"Neo",tt0234215,ACTED_IN
keanu,"Neo",tt0242653,ACTED_IN
laurence,"Morpheus",tt0133093,ACTED_IN
laurence,"Morpheus",tt0234215,ACTED_IN
laurence,"Morpheus",tt0242653,ACTED_IN
carrieanne,"Trinity",tt0133093,ACTED_IN
carrieanne,"Trinity",tt0234215,ACTED_IN
carrieanne,"Trinity",tt0242653,ACTED_IN
其中,这个节点的属性,role没有标注:
,role是属性,可以加双引号,也可以不加。最好是指定一下格式,譬如:int
为数值型,还有字符型roles:string[]
window执行:
neo4j-import.bat --into ../data/databases/graph.db --id-type string --nodes:attribute ../import/movies.csv --relationships ../import/actors.csv --relationships ../import/roles.csv
--into
,是指定存入名字,可以修改名字。--nodes:attribute
,其中,nodes:
后面是用来指定节点大类的名称的--id-type string
,之前节点ID只能由数字组成,现在允许字符+数字
共同定义。
最后启动:neo4j console
数据量小的话,可以考虑用Load csv 示例:
USING PERIODIC COMMIT 10
LOAD CSV WITH HEADERS FROM "file:///actors.csv" AS line
create (a:actors{personId:line.personId,name:line.name,LABEL:line.LABEL})
USING PERIODIC COMMIT 10
LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line
create (a:movies{movieId:line.movieId,title:line.title,year:line.year,LABEL:line.LABEL})
LOAD CSV WITH HEADERS FROM "file:///roles.csv" AS line with line
merge (p1:actors{personId:line.START_ID})
merge (p2:movies{movieId:line.END_ID})
WITH * create (p1)-[r:relstion]->(p2)
来源:CSDN
作者:weixin_43779985
链接:https://blog.csdn.net/weixin_43779985/article/details/103893528