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

Python爬虫与算法

共 1239字,需浏览 3分钟

 · 2021-11-29

  本文将会介绍一些较高级的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;

则返回结果如下:

对国家节点按出度进行排序
  1. 改变节点的标签

  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语句,感谢阅读~


浏览 100
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报