![c9b2ec669ed8939a3161b5afd3b08a00.png](https://i-blog.csdnimg.cn/blog_migrate/4d349f4dc29d21403c79ac35b05168f3.jpeg)
在个人博客也有,搬运到知乎一下。
http://www.junphy.com/wordpress/index.php/2020/03/16/import-ownthink-to-neo4j/
环境:
1.Neo4j database: 4.0.1 (是Neo4j graph数据库版本,非 neo4j desktop版本)
2.jdk11 (neo4j 4.0.1要求jdk需要11)
OwnThink开源了史上最大规模(1.4亿)中文知识图谱,地址:https://github.com/ownthink/KnowledgeGraphData
![38e296c5cca9c613f329cb8b666b6a2a.png](https://i-blog.csdnimg.cn/blog_migrate/8254cdaa46bf43507873a8b876509fe7.jpeg)
下载解压后查看知识图谱规模:
$ wc -l ownthink_v2.csv
140919781 ownthink_v2.csv
在github开源地址下可以找到阿里巴巴的一个下载数据源(链接 https://nebula-graph.oss-accelerate.aliyuncs.com/ownthink/kg_v2.tar.gz),下载之后解压,打开其中的 read_first.txt ,下载好简单清洗后的edge.csv和vertex.csv。
![4dcbeb7e98663086d5e1324ac3909c90.png](https://i-blog.csdnimg.cn/blog_migrate/e0ab6c6bbcc1939557376e80d359df8d.jpeg)
可以看到数据量很大,在阿里巴巴的压缩包中,还有一篇pdf文档,介绍了将数据导入nebula 图数据库中的步骤以及edge.csv和vertex.csv的格式,这里简单贴一下数据格式:
![61d0b78c8b4c7885a422101c679b464d.png](https://i-blog.csdnimg.cn/blog_migrate/bb918beee1ddbe7d1b119b39020fc9e0.jpeg)
![3f6c6c9e15b5075b79cd35af8d1ef32d.png](https://i-blog.csdnimg.cn/blog_migrate/7bb4952afc7ba1f7b52d4ee6b066e43f.jpeg)
在网上找了一下如何导入到neo4j中,参考了:https://yuukiblog.top/2019/10/16/neo4j%E5%AF%BC%E5%85%A5%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E5%88%9D%E4%BD%93%E9%AA%8C/
Neo4j要求的数据格式(不清楚其他的格式能否导入):
entity.csv —— 作为图数据库中的实体::ID,name,:LABEL
:IDname:LABEL实体id(不可重复)实体名实体标签
rel.csv —— 作为实体的关系: :START_ID,name,:END_ID,:TYPE
:START_IDname:END_ID:TYPE实体ID关系名实体ID类型
因此,首先在阿里巴巴清洗后的文本基础上将文件格式转成符合我们要求的格式。限于篇幅,代码这里就不贴了,如果有需要可以给我留言。最终转成的数据格式如下,使用Python读出了前10行:
![d9f345d4dba2a88de5de9c871e0dc949.png](https://i-blog.csdnimg.cn/blog_migrate/f24cef82c4d9521681b40cb349e85b90.jpeg)
转成需要的格式之后即可准备进行导入。首先将转换后的两个文件放入neo4j安装路径下的import文件夹。如果不知道在哪,可以通过Neo4j desktop打开本地的一个图数据库,点击Manage:
![b7454d8c9c724b6ab8d4b49e988db44e.png](https://i-blog.csdnimg.cn/blog_migrate/667179276e84683f263ad5c767f48e86.jpeg)
点击open folder即可打开import文件夹。
![59b7ff829e1506f03c8a9c5b0a5f4261.png](https://i-blog.csdnimg.cn/blog_migrate/0b2f71576caef405af129d33feb1824b.jpeg)
由于版本差异,上述文章中的导入命令无法运行,经过修改测试,个人使用如下格式成功进行导入:
./neo4j-admin import --database graph.db --nodes=../import/vertex_new_form.csv --relationships=../import/edge_new_form.csv --ignore-extra-columns=true --skip-duplicate-nodes=true --skip-bad-relationships=true
注:网上很多版本说需要先删除databases文件夹下的graph.db文件夹,从本人测试来看,完全不需要,上述命令中的graph.db可任意更换名称。
如果数据运行正确,会出现一下画面,首先确定导入需要的资源(对内存还是有一定要求的):
![55387507906ab35f078dc848bab378c2.png](https://i-blog.csdnimg.cn/blog_migrate/4fdfd99ac26fadec76145e95fe3eb098.jpeg)
接着导入节点:
![7b7712222e2ea21847b6a575aa6cdbe8.png](https://i-blog.csdnimg.cn/blog_migrate/f17fff7faa5a7c6df49c138f5545172e.jpeg)
导入关系:
![729e531ecbd17e2c9d9d403cc328fd23.png](https://i-blog.csdnimg.cn/blog_migrate/82cd10cf63f7d7ea92388b0a595dc918.jpeg)
建立关系:
![c4ed878ad1ce91d88c4fe0aca50bfbd0.png](https://i-blog.csdnimg.cn/blog_migrate/8cd2b1b0d55587aa27095d849f93f28f.jpeg)
完成:
![99002161f291b693f331fe1a037b03fd.png](https://i-blog.csdnimg.cn/blog_migrate/4f6530313a3291b7ca55fd0017aa2d45.jpeg)
最终导入,csv格式中还是有错误的数据,因此设置了 skip-bad-relationships
:
IMPORT DONE in 19m 10s 463ms.
Imported:
45464785 nodes
139916576 relationships
185380388 properties
Peak memory usage: 688.9MiB
There were bad entries which were skipped and logged into
下面即需要将数据库进行展示,新建的graph默认有两个数据库,对应databases文件夹下的两个文件夹:neo4j和system。不知道为何使用上述命令导入之后新增的graph.db(名字和命令中的database参数有关)无法显示,也可能是本来就不会显示。。。
![0663dbd43a75ef2ec24bd25c86895c4e.png](https://i-blog.csdnimg.cn/blog_migrate/de173bf419e666276e1e106a128d4701.jpeg)
没办法,只能通过其他办法。对比了一下几个文件夹下的内容,发现可以将graph.db先dump再载入到现有的某个数据库几个,成功实现:
进入到安装目录的bin文件夹下,需要先新建好 dump 文件的目录:dump:
./neo4j-admin dump --database=graph.db --to=../backups/graph/2020-3-16.dump
在load到现有的数据库中,因为我原有的两个数据库是空的,不清楚是否会抹除已有的数据(应该不会),laod:
./neo4j-admin load --from=../backups/graph/2020-3-16.dump --database=neo4j --force
更多参数参考: https://neo4j.com/docs/operations-manual/current/tools/dump-load/
接下来,在graph中选择你导入的数据库即可看到了,简单查询一下:
![ae6ece29bde3455f67c01066e8766eb4.png](https://i-blog.csdnimg.cn/blog_migrate/03990f8d58d41d0c82c3638d76541adb.jpeg)