首页 > 数据库 >使用neo4j建立图形数据库(二)

使用neo4j建立图形数据库(二)

时间:2023-01-05 17:36:53浏览次数:42  
标签:关系 数据库 节点 neo4j 图形 csv id MATCH

使用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
  •  

标签:关系,数据库,节点,neo4j,图形,csv,id,MATCH
From: https://www.cnblogs.com/ZhiXiaoBbai/p/17028304.html

相关文章

  • SQL Server迁移数据库文件(ldf&mdf文件)到其他盘
    为什么SQLServer安装时,默认都安装在C盘,包括数据库文件的默认位置也是C盘一般路径是C:/ProgramFiles/MicrosoftSQLServer/MSSQL14.MSSQLSERVER/MSSQL/DATA随着时间的......
  • antv/g2图形横坐标文字斜着展示
    this.chart.axis('x',{label:{offset:30,//设置坐标轴文本label距离坐标轴线的距离textStyle:{textAlign:'center',//文本对齐方向,可取值为:startmiddle......
  • shell备份mysql数据库指定表
    1、先执行命令:netstat -ln |grep mysql获取当前mysql的socket  2、执行如下命令备份数据库的指定表mysqldump -hIP-P端口-u数据库用户-p数据库密码--sock=......
  • [Oracle19C 数据库管理] 初始化参数
    初始化参数文件默认情况下,初始化参数文件保存在$ORACLE_HOME/dbs目录中。初始化参数分为SPFILE和Pfile两种。SPFILE(ServerParameterFile)二进制文件,可以由数......
  • 数据库
    1、​​浅谈JDBC的理解(一)​​2、​​JDBC详细介绍​​3、​​Java数据库连接​​4、​​JPA与JDBC的区别和基本用法​​5、​​jdbc、jpa、springdatajpa、hibernate、......
  • 一个查找mysql数据库无主键表的脚本
    说明:遍历所有的库表然后查询是否具有主键/bin/bashdb_host=172.19.211.2#dbipdb_name_list="chimessoxrayintcommpultus"#填写db_name支持多个数据库,以空格隔......
  • C# WPF中使用SqLite-net数据库
    在研究安卓手机与pc电脑使用数据线进行数据传输的过程中(为啥这么二,因为甲方人员不允许使用互联网,就算是内部的局域网wifi都不可以),涉及到了WPF操作安卓常用数据库SqlLite的......
  • MySQL 8.x 数据库主从复制搭建
    前提:MySQL修改server-uuid的方法前提:如果服务器是克隆master的服务器的,server-uuid值都是一样的。会导致主从复制报错误1593,修改一下server-uuid以后重启MySQL1.查......
  • 数据库alter基础命令
    数据库ALTER语句使用ALTER语句使用ALTER是数据库DDL语言的一部分,其操作对像主要是可以是表中的字段和索引,一般被用来修改上述对象的部分。1、操作表1.1表中增加列ALT......
  • pymysql之常见数据库操作
    导包并关联数据库importpymysqlconn=pymysql.Connect(host='localhost',user='root',db='stu',port=3306,password='dong')c=conn.cursor()查询某数据库各个表名sql=......