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

图数据库


创建节点:
LOAD CSV WITH HEADERS FROM 'file:///p.csv' AS line
create (:star {id:line.from_id,name:line.from_name})
LOAD CSV WITH HEADERS FROM 'file:///r.csv' AS line
create (:star_relation {star_relation_id:line.from_id,star_relation_name:line.from_name,to_relation_id:line.to_id,to_relation_name:line.to_name,relasion:line.relation})
查询明星关系:
match (n:star),(m:star_relation),(s:star) where n.name = "黄晓明" and m.star_relation_name = "黄晓明" and s.name=m.to_relation_name
return n.name,m.relasion,s.name

创建关系:
match (n:star {star_name:"黄晓明"}),(m:star_relation),(s:star)
where m.star_relation_name = n.star_name and s.star_name = m.to_relation_name
create (n)-[:关系{relation:m.relasion}]->(s)

创建批量所有关系:
match (n:star),(m:star_relation),(s:star)
where n.star_name = m.star_relation_name and s.star_name = m.to_relation_name
create (n)-[r:明星关系{relation:m.relasion}]->(s)

删除关系:
MATCH (r)
WHERE id(r) = 493 删除该id 的节点关系
DETACH DELETE r

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

查询:节点
MATCH p=(:star {name:"黄晓明"})-[r:`明星关系`]->() RETURN p LIMIT 25

 

 

 

使用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
  •  
posted @ 2023-01-05 17:24  小林子哈哈  阅读(610)  评论(0编辑  收藏  举报