文章目录
Cypher 常用函数
第1关:常用函数
任务描述
本关任务:使用函数完成查询任务。
相关知识
为了完成本关任务,你需要掌握:
- 常用函数;
- 字符串函数;
- AGGREGATION 聚合;
- 关系函数。
常用函数
函数 | 用法 |
---|---|
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)
编程要求
根据提示,在右侧编辑器补充代码;
- 查询节点标签为 person 的个数有多少;
- 查询 xiyouRelation 里孙悟空的节点个数;
- 查询 xiyouRelation 里 孙悟空节点的 id 最大是多少;
- 查询只输出 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
文章,夫妻,马伊琍
乔任梁,好友,李易峰
刘涛,好友,林心如
张博,绯闻,江珊
宫泽理惠,绯闻,福山雅治
明道,绯闻,曾之乔
刘小慧,旧爱,郭晋安
........
节点标签说明:
创建标签
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