说明
因为我也刚接触知识图谱,就是小白,本篇博客相当于一些入门级的Cypher语句的举例,然后具体说明一下NEO4J Desktop导入CSV文件是怎么实现的,以及他的一些基本操作,适合刚接触的小伙伴。如果大家对于NEO4J的配置有疑问的话可以参考文章NEO4J桌面版的配置和连接Pycharm_neo4j 桌面版-CSDN博客
基本使用方法
1.清空数据,删除之前已有的节点、关系和属性等。
match (n) detach delete n
2.展示知识图谱中所有的节点、关系和属性等。
match(n) return n
3.创建
创建节点
创建没有属性的节点
创建一个节点,其标签为学生,没有属性。
create (n:学生)
创建包含属性的节点
n代表节点名 学生是节点的标签(label)名 姓名、年龄、性别都是属性名 ,
标签名和属性名不用引号修饰,但是属性值如果是字符串需要加引号
create (n:学生 {姓名:'周杰伦',年龄:40,性别:'男'})
创建多标签的节点
创建一个既是学生又是父亲的节点
CREATE (n:学生:父亲)
我们也可以为周杰伦参加上一个歌手的节点标签
MATCH(学生 {姓名:'周杰伦'}) set 学生:歌手
创建关系
创建新关系
- CREATE (n:埠渝)-[r:LIKES]->(m:周杰伦)
- RETURN r
如下图所示,会创建出两个新的节点 ,一个新的关系,即新节点+新关系+无属性关系
创建有属性的关系
CREATE (n:学生{姓名:"李四"})-[relation:LIKES{程度:"十分喜爱"}]->(m:老师{姓名:"唐老师"})
下图可以看到,我们新建了一条带属性的关系边。
为现有的节点添加关系
- MATCH (n:学生 {姓名:'埠渝'}), (m:歌手 {姓名:'周杰伦'})
- CREATE (n)-[r:likes]->(m)
- RETURN n, r, m;
当然也可以增加一定的限制条件,比如说ID。这里的id要注意是自己电脑上的。
- MATCH (n:学生 ), (m:歌手)
- where id(m)=11 and id(n)=12
- CREATE (n)-[r:DIS]->(m)
- RETURN n, r, m;
4.查询
查找节点相关信息
查找节点
其中这个学生是我们要查询的节点的标签(label),where里的事节点的属性,可以用来筛选节点标签是学生中,我们要去查询的是哪一个。
-
- match (n:学生) where n.姓名='埠渝' return n
查询节点的标签
也就是说像前面所说的,我们为周杰伦创建了两个节点标签学生和歌手,意思就是把周杰伦这个节点对应的所有标签都查询出来。
MATCH (a:学生) where a.姓名='周杰伦' RETURN labels(a)
查询节点的属性值
MATCH (a:学生) where a.姓名='埠渝' RETURN properties(a)
查询节点的属性键
MATCH (a:学生) where a.姓名='埠渝' RETURN keys(a)
这里我们可以和上边的图对应一下,就很容易理解是什么意思了。
查找与当前节点有关系的的节点
查找李四所有有关系的老师的姓名
- MATCH (n:学生 { 姓名 : '李四' })-->(m:老师)
- RETURN m.姓名
查找李四所有喜欢的老师的姓名
- MATCH (n:学生 { 姓名 : '李四' })-[r:LIKES]->(m:老师)
- RETURN m.姓名
查找关系
查询节点间的关系
查询埠渝和周杰伦间的关系类型
match(a) where a.姓名='埠渝' match(b) where b.姓名='周杰伦' match p=(a)-[r]->(b) return type(r)
查询关系的所有属性
查询李四和唐老师之间的关系的所有属性
查询节点间关系的属性键
match(a) where a.姓名='李四' match(b) where b.姓名='唐老师' match p=(a)-[r]->(b) return keys(r)
5.删除
删除节点的所有相关关系
注意这里是没有箭头的
- MATCH (n:学生{姓名:'埠渝'})-[r]-()
- DELETE r
删除节点的所有外向关系
这里就是有剪头的了
- MATCH ()-[r]->(n:老师{姓名:'唐老师'})
- DELETE r
删除某个检点的某类关系
- MATCH (n:学生{姓名:'埠渝'})-[r:LIKES]-()
- DELETE r
删除实体的属性
- MATCH (n:学生{姓名:'埠渝'})
- REMOVE n.性别
删除所有节点和关系
- MATCH (n)
- OPTIONAL MATCH (n)-[r]-()
- DELETE n,r
6.修改
修改节点属性
- create(n:学生{姓名:'埠渝',年龄:23})
- MATCH (n:学生{姓名:'埠渝'})
- SET n.姓名='王哥'
修改节点标签
- MATCH (n:学生{姓名:'王哥'})
- REMOVE n:学生
- SET n:青年
修改关系的类型
- MATCH (n:学生)-[r:LIKES]-(m:歌手)
- WHERE n.姓名='埠渝' and m.姓名='周杰伦'
- CREATE (n)-[r2:HATES]->(m)
- DELETE r
NEO4J Desktop导入CSV文件
数据准备
将数据另存为下边的这个文件格式。
放入NEO4J中
这里像这样点击找到这个import ,会打开这个文件夹,这时候我们把上边的CSV文件保存到文件夹里就可以了。
代码
打开Neo4j Browser,输入下列代码
load csv with headers from "file:///PersonD.csv" as PersonD return PersonD
输出结果如下方所示,得到文件对应的结构化信息
创建节点
通过下列代码可以将文件里的人都抽出来创建节点,节点的标签为人,节点有一个属性姓名
- load csv with headers from "file:///PersonD.csv" as PersonD
- merge (A:人{姓名:PersonD.人})
- return count(A)
当然,我们不用上边的代码,用下边的代码就可以把文件里所有的属性都给节点带上了。
- load csv with headers from "file:///PersonD.csv" as PersonD
- merge (A:人{姓名:PersonD.人,三种人:PersonD.三种人,党员:PersonD.党员,身份证号:PersonD.身份证号码,年龄:PersonD.年龄})
- return count(A)
依据CSV数据创建关系
准备数据
保存在上述所说的import文件夹里。
创建节点
分别输入下列两段代码,创建节点
- load csv with headers from "file:///PersonD1.csv" as PersonD1
- merge (f:公民{公民:PersonD1.公民})
- return count(f)
- load csv with headers from "file:///PersonD1.csv" as PersonD1
- merge (B:身份{身份:PersonD1.身份})
- return count(B)
结果如下图所示。
建立关系
输入下列代码,可以将身份和公民之间建立关系。
- load csv with headers from "file:///PersonD1.csv" as PersonD1
- MATCH (f:公民{公民:PersonD1.公民})
- MATCH (B:身份{身份:PersonD1.身份})
- MERGE (f)-[r:身份是]->(B)
效果图,如下。
Create和Merge的区别
Create:
CREATE
用于创建节点、关系或者属性,如果给定的模式已经存在,CREATE
会强制性地创建新的节点、关系或属性,即使相同的模式已经存在于数据库中。- 它总是创建新的模式,不管之前是否存在相同的模式。
Merge:
MERGE
也用于创建节点、关系或者属性,但它会首先尝试在数据库中查找给定的模式。如果找到了匹配的模式,则不会创建新的,而是将现有的模式返回。- 如果没有找到匹配的模式,则会创建新的模式。
总的来说:
CREATE
总是创建新的模式,而 MERGE
会先查找是否已经存在相同的模式,存在则返回,不存在则创建。在需要确保模式的唯一性时,MERGE
是一个很有用的工具,可以避免重复创建相同的节点、关系或属性。
报错
如果出现这个报错,他的原因就是你的表格里的数据他不同列的个数不一样,比如说第一列20个,第二列19个,这样的话,你去读第一列(最长的这列)时不会出错,但是去读第二列的时候就会出错,就是因为你列表里的数据不一样长。
Neo.ClientError.Statement.SemanticError Cannot merge the following node because of null property value for
欢迎大家有问题在评论区打出来,或者博客有什么问题,欢迎指正。
说明
因为我也刚接触知识图谱,就是小白,本篇博客相当于一些入门级的Cypher语句的举例,然后具体说明一下NEO4J Desktop导入CSV文件是怎么实现的,以及他的一些基本操作,适合刚接触的小伙伴。如果大家对于NEO4J的配置有疑问的话可以参考文章NEO4J桌面版的配置和连接Pycharm_neo4j 桌面版-CSDN博客
基本使用方法
1.清空数据,删除之前已有的节点、关系和属性等。
match (n) detach delete n
2.展示知识图谱中所有的节点、关系和属性等。
match(n) return n
3.创建
创建节点
创建没有属性的节点
创建一个节点,其标签为学生,没有属性。
create (n:学生)
创建包含属性的节点
n代表节点名 学生是节点的标签(label)名 姓名、年龄、性别都是属性名 ,
标签名和属性名不用引号修饰,但是属性值如果是字符串需要加引号
create (n:学生 {姓名:'周杰伦',年龄:40,性别:'男'})
创建多标签的节点
创建一个既是学生又是父亲的节点
CREATE (n:学生:父亲)
我们也可以为周杰伦参加上一个歌手的节点标签
MATCH(学生 {姓名:'周杰伦'}) set 学生:歌手
创建关系
创建新关系
- CREATE (n:埠渝)-[r:LIKES]->(m:周杰伦)
- RETURN r
如下图所示,会创建出两个新的节点 ,一个新的关系,即新节点+新关系+无属性关系
创建有属性的关系
CREATE (n:学生{姓名:"李四"})-[relation:LIKES{程度:"十分喜爱"}]->(m:老师{姓名:"唐老师"})
下图可以看到,我们新建了一条带属性的关系边。
为现有的节点添加关系
- MATCH (n:学生 {姓名:'埠渝'}), (m:歌手 {姓名:'周杰伦'})
- CREATE (n)-[r:likes]->(m)
- RETURN n, r, m;
当然也可以增加一定的限制条件,比如说ID。这里的id要注意是自己电脑上的。
- MATCH (n:学生 ), (m:歌手)
- where id(m)=11 and id(n)=12
- CREATE (n)-[r:DIS]->(m)
- RETURN n, r, m;
4.查询
查找节点相关信息
查找节点
其中这个学生是我们要查询的节点的标签(label),where里的事节点的属性,可以用来筛选节点标签是学生中,我们要去查询的是哪一个。
-
- match (n:学生) where n.姓名='埠渝' return n
查询节点的标签
也就是说像前面所说的,我们为周杰伦创建了两个节点标签学生和歌手,意思就是把周杰伦这个节点对应的所有标签都查询出来。
MATCH (a:学生) where a.姓名='周杰伦' RETURN labels(a)
查询节点的属性值
MATCH (a:学生) where a.姓名='埠渝' RETURN properties(a)
查询节点的属性键
MATCH (a:学生) where a.姓名='埠渝' RETURN keys(a)
这里我们可以和上边的图对应一下,就很容易理解是什么意思了。
查找与当前节点有关系的的节点
查找李四所有有关系的老师的姓名
- MATCH (n:学生 { 姓名 : '李四' })-->(m:老师)
- RETURN m.姓名
查找李四所有喜欢的老师的姓名
- MATCH (n:学生 { 姓名 : '李四' })-[r:LIKES]->(m:老师)
- RETURN m.姓名
查找关系
查询节点间的关系
查询埠渝和周杰伦间的关系类型
match(a) where a.姓名='埠渝' match(b) where b.姓名='周杰伦' match p=(a)-[r]->(b) return type(r)
查询关系的所有属性
查询李四和唐老师之间的关系的所有属性
查询节点间关系的属性键
match(a) where a.姓名='李四' match(b) where b.姓名='唐老师' match p=(a)-[r]->(b) return keys(r)
5.删除
删除节点的所有相关关系
注意这里是没有箭头的
- MATCH (n:学生{姓名:'埠渝'})-[r]-()
- DELETE r
删除节点的所有外向关系
这里就是有剪头的了
- MATCH ()-[r]->(n:老师{姓名:'唐老师'})
- DELETE r
删除某个检点的某类关系
- MATCH (n:学生{姓名:'埠渝'})-[r:LIKES]-()
- DELETE r
删除实体的属性
- MATCH (n:学生{姓名:'埠渝'})
- REMOVE n.性别
删除所有节点和关系
- MATCH (n)
- OPTIONAL MATCH (n)-[r]-()
- DELETE n,r
6.修改
修改节点属性
- create(n:学生{姓名:'埠渝',年龄:23})
- MATCH (n:学生{姓名:'埠渝'})
- SET n.姓名='王哥'
修改节点标签
- MATCH (n:学生{姓名:'王哥'})
- REMOVE n:学生
- SET n:青年
修改关系的类型
- MATCH (n:学生)-[r:LIKES]-(m:歌手)
- WHERE n.姓名='埠渝' and m.姓名='周杰伦'
- CREATE (n)-[r2:HATES]->(m)
- DELETE r
NEO4J Desktop导入CSV文件
数据准备
将数据另存为下边的这个文件格式。
放入NEO4J中
这里像这样点击找到这个import ,会打开这个文件夹,这时候我们把上边的CSV文件保存到文件夹里就可以了。
代码
打开Neo4j Browser,输入下列代码
load csv with headers from "file:///PersonD.csv" as PersonD return PersonD
输出结果如下方所示,得到文件对应的结构化信息
创建节点
通过下列代码可以将文件里的人都抽出来创建节点,节点的标签为人,节点有一个属性姓名
- load csv with headers from "file:///PersonD.csv" as PersonD
- merge (A:人{姓名:PersonD.人})
- return count(A)
当然,我们不用上边的代码,用下边的代码就可以把文件里所有的属性都给节点带上了。
- load csv with headers from "file:///PersonD.csv" as PersonD
- merge (A:人{姓名:PersonD.人,三种人:PersonD.三种人,党员:PersonD.党员,身份证号:PersonD.身份证号码,年龄:PersonD.年龄})
- return count(A)
依据CSV数据创建关系
准备数据
保存在上述所说的import文件夹里。
创建节点
分别输入下列两段代码,创建节点
- load csv with headers from "file:///PersonD1.csv" as PersonD1
- merge (f:公民{公民:PersonD1.公民})
- return count(f)
- load csv with headers from "file:///PersonD1.csv" as PersonD1
- merge (B:身份{身份:PersonD1.身份})
- return count(B)
结果如下图所示。
建立关系
输入下列代码,可以将身份和公民之间建立关系。
- load csv with headers from "file:///PersonD1.csv" as PersonD1
- MATCH (f:公民{公民:PersonD1.公民})
- MATCH (B:身份{身份:PersonD1.身份})
- MERGE (f)-[r:身份是]->(B)
效果图,如下。
Create和Merge的区别
Create:
CREATE
用于创建节点、关系或者属性,如果给定的模式已经存在,CREATE
会强制性地创建新的节点、关系或属性,即使相同的模式已经存在于数据库中。- 它总是创建新的模式,不管之前是否存在相同的模式。
Merge:
MERGE
也用于创建节点、关系或者属性,但它会首先尝试在数据库中查找给定的模式。如果找到了匹配的模式,则不会创建新的,而是将现有的模式返回。- 如果没有找到匹配的模式,则会创建新的模式。
总的来说:
CREATE
总是创建新的模式,而 MERGE
会先查找是否已经存在相同的模式,存在则返回,不存在则创建。在需要确保模式的唯一性时,MERGE
是一个很有用的工具,可以避免重复创建相同的节点、关系或属性。
报错
如果出现这个报错,他的原因就是你的表格里的数据他不同列的个数不一样,比如说第一列20个,第二列19个,这样的话,你去读第一列(最长的这列)时不会出错,但是去读第二列的时候就会出错,就是因为你列表里的数据不一样长。
Neo.ClientError.Statement.SemanticError Cannot merge the following node because of null property value for
评论记录:
回复评论: