【头歌实训】Cypher 常用函数 使用 CQL 构建一个关系图谱

Cypher 常用函数

第1关:常用函数

任务描述

本关任务:使用函数完成查询任务。

相关知识

为了完成本关任务,你需要掌握:

  1. 常用函数;
  2. 字符串函数;
  3. AGGREGATION 聚合;
  4. 关系函数。

常用函数

函数用法
String 字符串他们用于使用 String 自变量
Aggregation 聚合它们用于对 CQL 查询结果执行一些聚合操作
Relationship 关系他们用于获取关系的细节,如startnode,endnode等

字符串函数

与 SQL 一样,Neo4J CQL 提供了一组 String 函数,用于在 CQL 查询中获取所需的结果。

功能描述
UPPER它用于将所有字母更改为大写字母
LOWER它用于将所有字母改为小写字母
SUBSTRING它用于获取给定 String 的子字符串
REPLACE它用于替换一个字符串的子字符串
MATCH (e) RETURN id(e),e.name,substring(e.name,0,2)

AGGREGATION 聚合cql

和 SQL 一样,Neo4j CQL 提供了一些在RETURN 子句中使用的聚合函数。 它类似于 SQL 中的 GROUP BY 子句。 我们可以使用 MATCH 命令中的 RETURN +聚合函数来处理一组节点并返回一些聚合值。

聚集功能描述
COUNT它返回由 MATCH 命令返回的行数
MAX它从 MATCH 命令返回的一组行返回最大值
MIN它返回由 MATCH 命令返回的一组行的最小值
SUM它返回由 MATCH 命令返回的所有行的求和值
AVG它返回由 MATCH 命令返回的所有行的平均值
MATCH (e) RETURN count(e)

关系函数

Neo4j CQL 提供了一组关系函数,以在获取开始节点,结束节点等细节时知道关系的细节。

功能描述
STARTNODE它用于知道关系的开始节点
ENDNODE它用于知道关系的结束节点
ID它用于知道关系的 ID
TYPE它用于知道字符串表示中的一个关系的 TYPE
match (a)-[r] ->(b) return id(r),type(r)

编程要求

根据提示,在右侧编辑器补充代码;

  1. 查询节点标签为 person 的个数有多少;
  2. 查询 xiyouRelation 里孙悟空的节点个数;
  3. 查询 xiyouRelation 里 孙悟空节点的 id 最大是多少;
  4. 查询只输出 person 中孙悟空关系节点的结束节点(并且去除重复节点),结果按升序排序。

测试说明

平台会对你编写的代码进行测试:

测试输入:; 预期输出:

person节点数
86
节点个数
12
最大id
38
结束节点
(:person {name: "猪八戒"})
(:person {name: "沙僧"})
(:person {name: "白龙马"})
(:person {name: "唐僧"})
(:person {name: "菩提老祖"})
(:person {name: "镇元子"})
(:person {name: "牛魔王"})
(:person {name: "蛟魔王"})
(:person {name: "鹏魔王"})
(:person {name: "狮驼王"})
(:person {name: "猕猴王"})
(:person {name: "禺狨王"})

答案代码

评测前的准备

# 更新配置文件
source /etc/profile

# 启动 Neo4j
/opt/neo4j-community-3.5.35/bin/neo4j start

# 在创建唐僧关系链时,需要优先导入数据
cat /data/workspace/myshixun/step1/pro_xiyou.cypher | /opt/neo4j-community-3.5.35/bin/cypher-shell -u neo4j -p 123456 --format plain

# 清空测试文件
true > /data/workspace/myshixun/step1/work.cypher

# 填入 Cypher 代码内容
vim /data/workspace/myshixun/step1/work.cypher

Cypher 代码内容

//**************Begin*************************

// 查询节点标签为 person 的个数有多少
match (p:person) return count(p.name) as person节点数;

// 查询 xiyouRelation 里孙悟空的节点个数
match (x:xiyouRelation) where x.from = '孙悟空' return count(x) as 节点个数;

// 查询 xiyouRelation 里 孙悟空节点的 id 最大是多少
match (x:xiyouRelation) where x.from = '孙悟空' return max(id(x)) as 最大id;

// 查询只输出 person 中孙悟空关系节点的结束节点(并且去除重复节点),结果按升序排序
match (n:person{name:"孙悟空"})-[r:`西游关系`]->(m) return distinct(m) as 结束节点 order by id(m);

//**************End**************************

使用 CQL 构建一个关系图谱

第1关:构建一个简单的关系图谱

任务描述

本关任务:在 Neo4j 中创建一个明星的关系图。

数据说明

数据集路径: 单个明星数据:/data/workspace/myshixun/step1/data/star.csv。 明星关系数据:/data/workspace/myshixun/step1/data/star_relatoin.csv。 数据格式如下: star.csv

roles
文章
乔任梁
刘涛
张博
宫泽理惠
明道
......

star_relatoin.csv

name1,relationship,name2
文章,夫妻,马伊琍
乔任梁,好友,李易峰
刘涛,好友,林心如
张博,绯闻,江珊
宫泽理惠,绯闻,福山雅治
明道,绯闻,曾之乔
刘小慧,旧爱,郭晋安
........

节点标签说明:

img

创建标签

star 为明星单节点。 starRelation 为明星关系节点。 关系 为关系节点标签。

任务要求

根据提示,在图形界面中进行操作,使用 LOAD CSV 读取明星数据,创建明星 刘烨的关系图。

测试说明

平台会对你编写的代码进行测试:

测试输入:; 预期输出:

查询刘烨的关系:
p
(:star {name: "刘烨"})-[:关系 {relation: "同学"}]->(:star {name: "秦昊"})
(:star {name: "刘烨"})-[:关系 {relation: "同学"}]->(:star {name: "曾黎"})
(:star {name: "刘烨"})-[:关系 {relation: "同学"}]->(:star {name: "章子怡"})

答案

测试前准备

# 更新配置文件
source /etc/profile

# 启动 Neo4j
/opt/neo4j-community-3.5.35/bin/neo4j start

# 编辑 Cypher 代码
vim /data/workspace/myshixun/step1/star.cypher

Cypher 代码

LOAD CSV WiTH HEADERS from 'file:///data/workspace/myshixun/step1/data/star.csv' as line merge(n:star {name: line.roles});
LOAD CSV WITH HEADERS FROM "file:///data/workspace/myshixun/step1/data/star_relatoin.csv" as line
merge (x:rolesRelation {name1:line.name1,relation:line.relationship,name2:line.name2});
match (n:star {name:"刘烨"}),(m:rolesRelation),(s:star) where n.name = m.name1 and m.name2 = s.name 
create (n)-[:关系 {relation:m.relation}] -> (s);

导入数据和关系

cat /data/workspace/myshixun/step1/star.cypher | /opt/neo4j-community-3.5.35/bin/cypher-shell -u neo4j -p 123456 --format plain
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值