Neo4j入门(六)从计算节点的出度、入度开始

  本文将会介绍一些较高级的Neo4j查询Cypher语句,先从计算节点的出度、入度开始。
  在此之前,我们先构建一个简单的电影知识图谱。

图谱构建

  我们将构建一个IMDB排名前250的电影知识图谱,其数据来源可访问网址:https://www.imdb.cn/imdb250/6,电影数据示例如下:
示例电影数据
  其中节点的Schema如下:

节点类型属性
Moviename,language,releaseDate,minutes
Personname
Countryname
Genrename

其中Movie为电影节点,Person为人物节点,包含导演、编剧、主演,Country为国家或地区,Genre为电影类型。关系Schema如下:

头结点尾结点关系备注
MoviePersondirector电影的导演
MoviePersoneditor电影的编剧
MoviePersonactor电影的主演
MovieCountrycountry电影所属国家或地区
MovieGenrehas电影类型

根据上述数据源及Schema,我们构建的电影图谱示例如下:

电影图谱示例

Cypher查询

  1. 查询节点的出度、入度

  首先我们查询某个节点的出度,比如我们想知道肖申克的救赎的出度(即有多少关系以该节点为头结点),则可以使用如下查询语句:

match (n:Movie{name: '肖申克的救赎'}) with n, size((n)-[]->()) as s return s;

返回结果如下:

s
9

  如果我们想查询某个节点的入度,比如我们想知道前250部电影中有多少部是美国拍的,则可以使用如下查询语句:

match (n:Country{name: '美国'}) with n, size((n)<-[]-()) as s return s;

返回结果如下:

s
186

  1. 匹配多种关系

  接下来我们查询多种关系,比如我们想知道阿甘正传的导演及电影类型,则可以使用如下查询语句:

match p=(n:Movie{name: '阿甘正传'}) -[r:director|has] -> (m) return p;

返回结果如下图:

阿甘正传的导演及电影类型

  1. 匹配多种类型节点

  匹配多种类型的节点时,不像匹配多种关系使用|那么方便,比如我们想知道图谱中的电影及国家,则可以使用如下查询语句:

match (n) where n:Movie or n:Country return n.name;
  1. 限定条件的节点出度、入度

  比如我们想知道肖申克的救赎的主演和导演数量,则可以使用如下查询语句:

match (n:Movie{name: '肖申克的救赎'}) with n, size((n)-[:actor|director]->()) as s return s;

返回结果如下:

s
6

又比如我们想知道一共有多少部剧情片和爱情片,则可以使用如下查询语句:

match (n:Genre) where n.name = '剧情' or n.name = '爱情' with n, size((n)<-[]- ()) as s return n.name, s;

返回结果如下:

n.name s
“爱情” 15
“剧情” 116

  1. 按节点出度、入度排序

  比如我们想按照国家所拍摄的电影数量对国家排序,即对国家节点按出度进行排序,则可以使用如下查询语句:

match (n:Country) with n, size((n)<-[]-()) as s order by s desc return n.name, s;

则返回结果如下:
对国家节点按出度进行排序
6. 改变节点的标签

  Neo4j是支持对同一节点赋予多个标签(label)的,那么我们尝试着对拥有director、editor、actor关系的Person节点再给它们赋予Director、Editor、Actor标签,查询语句如下:

match (n:Movie) -[r:director]->(m:Person) set m:Director return (m);

如下图:

节点类型中已增加了Director、Editor、Actor,但节点数量并未增加
  有了上述操作,我们就可以知道那些即是导演又是编剧又是主演的人了,查询语句如下:

match (n) where n:Director and n:Editor and n:Actor return (n);

返回结果如下:

即是导演又是编剧又是主演的人
去百度查询特瑞·琼斯,也是符合我们的搜索结果的:
特瑞·琼斯

总结

  从上面的查询中我们可以看到,知识图谱可以告诉我们很多有趣的事实,这也是图谱的魅力所在~
  本文将会介绍了一些较高级的Neo4j查询Cypher语句,感谢阅读~

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值