使用neo4j建立图形数据库(二)——在neo4j中批量建立节点和关系(远程neo4j server)
发布时间:2022/6/25 13:16:06
目录
- 一、文件准备
- 二、软件准备--(windows)neo4j browser
- 三、常见导入形式
- 四、批量创建节点
-
- 1.合并相同节点
- 五、批量创建关系
-
- 1.备注
- 六、查询图谱
-
- 1.查看创建图谱(整体):
- 2.查看某节点的关系(无向):
- 3.查询某人学生的学生
- 4.通过节点的id属性进行查询
- 七、修改图谱
- 八、删除图谱
-
- 1.删除节点
-
- (1)查看节点与其他节点存在关系:
- (2)删除节点,以及与之相关的所有关系:
- (3)删除不包含关系的,标签为address的节点:
- (4)通过节点的id属性进行删除
- 2.删除关系
- 3.总结
- 参考
一、文件准备
对于数据,需要将EXCEL另存为CSV,如果有多个sheet,则需要分开单独存储。并且需要将编码更改为utf-8,否则数据库无法显示中文。
我准备了6个文件(其中4个属性文件——用于创建节点;2个关系文件——用于创建关系):
1.student.csv
2.school.csv
3.address.csv
4.teacher.csv
5.关系文件:student_school.csv
6.关系文件:relation.csv
其中,第四列存在缺失值
二、软件准备–(windows)neo4j browser
快捷键 win+R
,输入cmd,运行命令行界面,输入neo4j.bat console启动neo4j。
之后打开浏览器,输入网址:http://localhost:7474/
即可看到neo4j的启动界面
三、常见导入形式
本文采用的是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由表格中的‘姓名’列赋值
(此处加载重复,请忽视,步骤完全一样)
但是graph图中不显示内容,需要选择自己想显示的节点属性:
按照上述步骤,建立school节点,最终结果:
查看创建的节点(标签为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.*
如下:
【3】重启neo4j服务
【4】可视化界面运行return apoc.version()
如上,则安装成功
【5】原本合并相同节点的Cypher语句便可以运行成功了。
【效果】
运行前:
运行后:
运行后,该标签节点状况:
五、批量创建关系
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)#创建标签为学校的关系
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'})<--();
return (:school{id:'1'})-->();
return (:school{id:'1'})--()
六、查询图谱
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属性即为:
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】彻底删除节点标签名,需要删除前期对该标签名建立的索引
参考
- 一文教你用 Neo4j 快速构建明星关系图谱
- Neo4j删除节点和关系、彻底删除节点标签名
- Neo4j的安装和社群发现算法
- neo4j数据库中合并相同节点
- neo4j进阶操作(四)neo4j导入csv,使用load导入csv文件进入neo4j
原文链接:https://www.ngui.cc/el/738328.html