neo4j 知识图谱之西游记关系查询

节点模式

  • 查询跟孙悟空有关系的所有节点
match(a:X_Person) -- (b) where a.name = '孙悟空' return  a,b
或者
match(a:X_Person{name:'孙悟空'}) -- (b)  return  a,b

查询说明:
上述的查询用到了 节点的模式。
(b):节点的变量名是b,后续可以给查询语句续用;后面没带:和标签,代表是匿名模式,可以是任何的节点。
(a:X_Person):属于 (n:label)模式,a 是变量名,后面的 where 和 return 可以用到。 X_Person 是指定的节点的标签;
(a:X_Person{name:‘孙悟空’}):这种模式可以描述节点的属性,可以是多个。这个语句里属性 name, 并且 name 的值是"孙悟空",等同于上面语句的 where a.name = ‘孙悟空’。

在这里插入图片描述

关系模式

  • 上述语句查询的是跟孙悟空有 relative 关系的所有节点
match(a:X_Person{name:'孙悟空'}) -[r:relative]- (b) return a,b
  • 查询孙悟空偷吃过的节点实体
 match(a:X_Person{name:'孙悟空'}) -[r:relative{role:'偷吃'}]- (b) return a,b

在属性图中,节点之间存在关系,[]表示关系,节点之间的关系用 ()-[]->() 表示。

  • [ r ] :r 是关系的变量名,[] 表示匿名;
  • [ r: relatvie ]:relatvie 表示关系的类型,一个关系只有一个类型;
  • [ r: relative{role:‘偷吃’}] :role 表示 relative 的属性,并且他的值是“偷吃”

在这里插入图片描述

关系的方向

  • 节点与节点间关系的关联模式
    关系是有方向的,-- 是表示不指定方向, --> 表示指定方向的。
    比如
match(a:X_Person{name:'孙悟空'}) <-[r:relative]- (b) return a,b

match(a:X_Person{name:'孙悟空'}) -[r:relative]-> (b) return a,b

match(a:X_Person{name:'孙悟空'}) <-[r:relative]-> (b) return a,b

在这里插入图片描述

在这里插入图片描述

关系变长查询

节点和节点通过关系进行连接。 通过节点的指定路径查询指定节点,就需要遍历了。

  • (a)–>(b) 是步长为 1 的路径 ,ab 节点之前有直接关系。像我们上面的查询,基本就都是有直接关系的。
  • (a)–>()–>(b) 是步长为 2 的路径,ab 之间有一个节点,两个关系。

步长的长度也在Cypher语音里也支持指定变长,通过 [*N…M] 来表示,N 代表最小值, M 代表最大值。

  • (a)-[*2]->(b):表示路径长度为2,起始节点是a,终止节点是b;
  • (a)-[*3…5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
  • (a)-[*…5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;
  • (a)-[*3…]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;
  • (a)-[*]->(b):表示不限制路径长度,起始节点是a,终止节点是b;

比如查询,和孙悟空有2-5步长关系的节点。

match(a:X_Person{name:'孙悟空'}) -[*2..5]-> (b) return a,b

这里要注意 -> 加上了箭头后,就是有指定方向的,如果中间也反向的,那么也不算的。
这里为什么出现了,沙悟净,因为,沙悟净和孙悟空之间也隔了一个猪八戒,刚好满足条件。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值