学习记录-neo4j通过batch-import导入数据
使用batch-import导入节点和关系
下载batch-import工具
-
batch-import原始项目地址:https://github.com/jexp/batch-import
在导入.gz压缩文件时,会出现关系无法导入的情况,所以如果要使用.gz压缩包进行导入,请使用下面这个版本:
-
某大神修改后的版本:https://github.com/mo9527/batch-import <-- 我下的这个
-
batch-import工具的使用需要java环境( jdk:7以上)
-
batch-import工具目录结构如下图:
将要导入的csv文件和.gz压缩包放在这个目录下
CSV文件的一些注意点
- 只使用了csv文件,未使用.gz压缩包格式
- 默认csv文件需要使用tab分隔,如果要导入的csv文件是以逗号‘,’分隔,可以在batch.properties 文件中进行配置:
batch_import.csv.delim=,
- 节点文件:
- 第一行为属性名称
- 需要有l:label 列才能创建出节点,用于节点标签
- 如果最初只导入一个文件,则行号对应于节点 id ( 开始为 0 ),id用于创建关系中
- 可以根据如下的代码配置属性自动索引属性:name:string:users 和配置的索引,如,然后属性 name 将在每个行的users 索引中编制索引
- 属性字段可以定义类型为 name:type,类型有( int,long,float,double,boolean,byte,short,char,String ),默认类型为String,即只写name时表示为String类型。
- 如有多个节点文件名用英文逗号','隔开。节点文件与关系文件间用空格' '隔开。
- 关系文件(两种):
- 一种用id,当节点文件只有一个时,第一列可以写从节点中这条数据对应的id(从0开始),第二列写到节点对应的id。(多个节点文件未尝试成功)
- 一种用自动索引属性。例:name:string:users。属性名name将在users索引中为每一行建立一个值为索引。这种写法需在batch.properties 文件中进行配置:
batch_import.node_index=exact
实例:需要导入两类节点a,b及关系a->b。
解决方法
- 方法:经过多次尝试,最终将两类节点写在一个节点文件中(因为两类节点标签不同,属性值也不同故合并到一个文件中),共两列(一列l:label,一列属性名)
nodes.csvl:label nm a 123 b 一二三 也可以将两个节点的属性分开写,只会更改节点中的属性名,不会有其他影响 l:label aname -- -- a 123 b 然后在关系文件中将其用id表示,例:第一列(a,123)用0表示,第二列的(b,一二三)用1表示,以此类推。 rels.csv 必须第一列为从节点,第二列为到节点 from to -- -- 0 1 csv文件中对应的索引id可以用python处理。 batch-import工具目录下(import.bat所在目录)执行命令: import.bat graph.db nodes.csv rels.csv
就会在该目录下生成graph.db文件,(关闭neo4j服务器)将该文件移到 neo4j\data\databases下,(启动neo4j服务) 浏览器中打开neo4j页面即可查看数据库中的内容。 - 注意点:
若在网页中看到节点上无信息或显示的不是想看到的信息可以:
点击上方节点标签名 -> 点击下方想要显示的消息标题
使用配置索引的方法:就像name:string:users
-
节点文件:
nodes.csv:l:label(必须有这列才能创建节点),另外两列分别为两类节点的自动索引属性。nm:string:users l:label mc:string:deviceId 123 a | \ b 一二三 这里有个bug:l:label必须在中间列才能成功创建关系 ???
-
关系文件
rels.csv:从节点列:nm:string:users,到节点列:mc:string:deviceId,关系列:type,属性列:属性名:属性类型(没有属性可以不写)nm:string:users mc:string:deviceId type 123 一二三 uses -
配置文件&执行命令
先在batch.properties中配置batch_import.node_index.users=exact batch_import.node_index.buyerId=exact batch_import.relationship_index.worked=exact
再在batch-import工具目录下(import.bat所在目录)执行命令:
import.bat graph.db nodes.csv rels.csv
就会在该目录下生成graph.db文件,(关闭neo4j服务器)将该文件移到 neo4j\data\databases下,(启动neo4j服务) 浏览器中打开neo4j页面即可查看数据库中的内容。 -
这个好像有时候有点问题?还没弄清楚,待更
疑问
- 如何导入多个节点文件?
补充
- 如果需要在已有数据库中添加节点和关系,需要在batch.properties中配置
batch_import.keep_db=true
,否则将创建一个新的数据库。