使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)

目录

一、文件准备

对于数据,需要将EXCEL另存为CSV,如果有多个sheet,则需要分开单独存储。并且需要将编码更改为utf-8,否则数据库无法显示中文。

我准备了6个文件(其中4个属性文件——用于创建节点;2个关系文件——用于创建关系):
1.student.csv
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
2.school.csv
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
3.address.csv
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
4.teacher.csv
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
5.关系文件:student_school.csv
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
6.关系文件:relation.csv
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
其中,第四列存在缺失值

二、软件准备–(windows)neo4j browser

快捷键 win+R,输入cmd,运行命令行界面,输入neo4j.bat console启动neo4j。
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
之后打开浏览器,输入网址:http://localhost:7474/
即可看到neo4j的启动界面

三、常见导入形式

《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
本文采用的是load形式

四、批量创建节点

进入neo4j安装目录下的import文件夹(我的是:D:\software\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import)
将准备好的用于创建节点的文件(student.csv和school.csv)复制到该目录下。
在noo4j的输入框中输入:

USING PERIODIC COMMIT 300 LOAD CSV WITH HEADERS FROM 'file:///student.csv' AS line
create (:student {stu_name:line.姓名,age:line.年龄,id:line.id})

运行之后便创建好了节点student。

  • USING PERIODIC COMMIT 300 :使用自动提交,每满300条提交一次,防止内存溢出;
  • WITH HEADERS表明csv文件的第一行是属性名。只有在使用了该参数后,才可以使用”line.name”这样的表示方式,否则需使用line[0]的表示方式;
  • as line:为每行数据重命名
  • create语句可以替换成merge,防止导入的数据重复;
  • student代表节点的标签名;
  • stu_name、age、id等代表节点的属性;
  • line.姓名:表示属性stu_name由表格中的‘姓名’列赋值
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
    (此处加载重复,请忽视,步骤完全一样)
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
    但是graph图中不显示内容,需要选择自己想显示的节点属性:
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
    按照上述步骤,建立school节点,最终结果:
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
    查看创建的节点(标签为student):
MATCH (n:student) RETURN n LIMIT 25

1.合并相同节点

MATCH (n:Tag)  #tag为节点标签
#以该节点的id字段为统计依据
WITH n.id AS id, COLLECT(n) AS nodelist, COUNT(*) AS count  
WHERE count > 1
CALL apoc.refactor.mergeNodes(nodelist) YIELD node
RETURN node

【备注】运行该代码时,出现报错:数据库实例中没有apoc.refactor.mergeNodes——需要安装 APOC 的 jar 包。

There is no procedure with the name `apoc.refactor.mergeNodes` registered for this database instance. Please ensure you've spelled the procedure name correctly and that the procedure is properly deployed.

下载网址:官网or neo4j国内地址(官网太慢了!!!)——下载与自己neo4j对应版本的jar包。

【1】下载后放到neo4j的安装目录的plugings目录下面(我的是D:\software\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\plugins)

【2】修改neo4j.conf文件,在文件最后加上
(我的neo4j.conf在D:\software\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\conf)

dbms.security.procedures.unrestricted=algo.*
dbms.security.procedures.unrestricted=apoc.*
如下:
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
【3】重启neo4j服务

【4】可视化界面运行return apoc.version()
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
如上,则安装成功
【5】原本合并相同节点的Cypher语句便可以运行成功了。
【效果】
运行前:《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
运行后:
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
运行后,该标签节点状况:
《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》

五、批量创建关系

LOAD CSV WITH HEADERS FROM "file:///student_school.csv" AS line 
match (from:student{id:line.student_id}),(to:school {id:line.school_id}) 
merge (from)-[r:学校]->(to)#创建标签为学校的关系

《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》

merge (from)-[:rel]->(to)#创建标签为rel,属性为空值的关系
merge (from)-[:rel { relation:line.辅导时间}]->(to)#创建标签为rel,属性由表格中‘辅导时间’赋值的的关系

1.备注

1.neo4j不可以画无向图
在创建就必须规定方向,并且只能是单向。(这是出于对查询效率的考虑)。如果关系的方向无关紧要,可以只建一个边,查询时不指定方向就可以了,即完全忽略关系的方向(MATCH (a)-[:relation]-(b)查询结果会和下面两条语句执行并合并后的结果完全一致:
MATCH (a)-[:relation]->(b) andMATCH (a)<-[:relation]-(b))
例如:

  • return (:school{id:'1'})<--();
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
  • return (:school{id:'1'})-->();
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》
  • return (:school{id:'1'})--()
    《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》

六、查询图谱

1.查看创建图谱(整体):

MATCH (n) RETURN n LIMIT 25

2.查看某节点的关系(无向):

标签为school,属性id为1的节点

return (:school{id:'1'})--()

有向查询参考上文(五—*备注)

3.查询某人学生的学生

(2层关系)

 match p=(n:teacher{teacher_name:"六六"})-[*..2]->() return p limit 50

4.通过节点的id属性进行查询

id属性即为:《使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)》

MATCH (n) where id(n)=452644 return n

七、修改图谱

通过节点的id属性进行修改:
将id为452644的relation属性改为“亲友“

MATCH (r)
WHERE id(r) = 452644
SET r.relation = "亲友"

八、删除图谱

1.删除节点

(1)查看节点与其他节点存在关系:

#标签为address的节点及其关系
MATCH (n:address)-[r]-() RETURN n,r

(2)删除节点,以及与之相关的所有关系:

MATCH (n:address)-[r]-() DELETE n,r  

(3)删除不包含关系的,标签为address的节点:

MATCH (n:address) DELETE n 

(4)通过节点的id属性进行删除

MATCH (n) where id(n)=452644 delete n

2.删除关系

获取节点的关系名称:
此处为获取标签为teacher的节点的所有关系的名称。

MATCH (n:teacher)-[r]-() RETURN r,type(r)

指定要删除的具体的关系名,删除某一个关系。
此处为删除teacher节点的名称为rel的关系。

MATCH (n:teacher)-[r:rel]-() DELETE r 

3.总结

总结提前:

【1】先删关系,再删节点

【2】当记不得关系名时,type(r)可以查到关系名

【3】彻底删除节点标签名,需要删除前期对该标签名建立的索引

参考

    原文作者:mmmmmyyyy
    原文地址: https://blog.csdn.net/mmmmmyyyy/article/details/107897217
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞