从零开始-知识图谱(3)高级语句总结和使用

1、高级语句背景

在这里插入图片描述

对于基础的语句,通过 MATCH,CREATE,MEGER,DELETE,SET等操作,可以进行简单的操作图谱。在Neo4j中,增删改查(CRUD)操作通过Cypher查询语言来完成。下面是Neo4j中常用的增删改查语句的示例:

1. 1创建(Create)

创建节点

CREATE (n:Person {name: 'Alice', age: 30})
RETURN n

上面这条语句创建了一个标签为Person的节点,并为其设置了属性nameage

创建关系

MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[r:FRIENDS_WITH]->(b)
RETURN r

这条语句创建了一个FRIENDS_WITH关系连接AliceBob两个节点。

1.2 查询(Read)

查询节点

MATCH (n:Person {name: 'Alice'})
RETURN n

这条语句查找所有name属性为AlicePerson节点。

查询关系

MATCH (a:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(b:Person)
RETURN a, r, b

这条语句查找Alice节点与其他Person节点之间的FRIENDS_WITH关系,并返回相关节点和关系。

1.3更新(Update)

更新节点属性

MATCH (n:Person {name: 'Alice'})
SET n.age = 31
RETURN n

这条语句将Aliceage属性更新为31

更新关系属性

MATCH (a:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(b:Person {name: 'Bob'})
SET r.since = 2023
RETURN r

这条语句为AliceBob之间的FRIENDS_WITH关系添加或更新since属性。

1.4删除(Delete)

删除关系

MATCH (a:Person {name: 'Alice'})-[r:FRIENDS_WITH]->(b:Person {name: 'Bob'})
DELETE r

这条语句删除AliceBob之间的FRIENDS_WITH关系。

删除节点

MATCH (n:Person {name: 'Alice'})
DELETE n

这条语句删除Alice节点。

注意:如果要删除的节点有关系存在,必须先删除关系才能删除节点。否则会报错。

强制删除节点及其关系

MATCH (n:Person {name: 'Alice'})
DETACH DELETE n

这条语句会删除Alice节点以及与其相关的所有关系。

2、定向查询

我们以刘焕勇老师的知识图谱为例,实体和关系都非常多,关系复杂,如果从节点中快速找到结果,这时我们就需要使用路径查询了。
在这里插入图片描述

2.1 最短路径查询

比如,我们需要查询心电图和呼吸内科最短路径,可以输入如下语句

![MATCH (a:Check{name:'心电图'}), (b:Department {name:'呼吸内科'})
MATCH p = shortestPath((a)-\[*\]-(b))
RETURN p](https://i-blog.csdnimg.cn/direct/aa3a04aaf3a94295bfc90e5fd796c8ed.png)

在这里插入图片描述

2.2 路径总数查询

上面可以看出,最短路径为2,那现在我们可以去查询最长路径为2的的路径有多少条,如下

MATCH (a:Check{name:'心电图'}), (b:Department {name:'呼吸内科'})
MATCH p=(a)-[r*..2]-(b)
RETURN p

在这里插入图片描述
当然可以如下查询,结果一样的

MATCH (a:Check{name:'心电图'}), (b:Department {name:'呼吸内科'})
MATCH p=(a)-[r*2]-(b)
RETURN p

但是r*..2r*2是有区别的,r*..2 为最长路径为2,r*2为只查询路径为2的路径。

2.3 模糊查询

比如,我们可以从所有节点里面查询含有 这个字的节点,不限制类型。如下

match (a) where a.name =~'.*肺.*' return a

在这里插入图片描述
可以看出,有549个节点含有关键字。我们可以进一步查询,如果只是疾病节点呢

match (a:Disease) where a.name =~'.*肺.*' return a

在这里插入图片描述
可以看出,疾病节点含的有327个。

3 总结

以上是日常使用最频繁的几种用法,可以举一反三,实现非常多的查询功能。如有疑问。欢迎私信沟通交流。帮忙点赞+关注,谢谢。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值