根据上一篇文章 Neo4j安装和启动教程 更改完密码操作后进入如下页面
点击图中左侧五角星,找到Sample Scripts示例脚本下的Exmaple Graphs示例图,运行Movie Graph(电影图表是一个将演员和导演通过合作的电影而联系在一起的)
一、Neo4j CQL常见操作指令
Number | CQL命令 | 用法 |
---|---|---|
1 | CREATE | 创建:增加节点、关系和属性 |
2 | MATCH | 匹配:检索相关节点,关系和属性数据 |
3 | DELETE | 删除:删除节点和关系 |
4 | RETURN | 返回:返回查询的结果 |
5 | WHERE | 条件:提供过滤检索数据的条件 |
6 | SET | 设置:添加或更改标签 |
7 | REMOVE | 移除:删除节点和关系的属性 |
8 | ORDER BY | 排序:排序检索的数据 |
9 | LIMIT | 限制:限制查询的数量 |
命名规范 |
---|
关键字—全部大写 |
关系名—全部大写 |
标签名—首字母大写 |
属性名和变量名—小写 |
1、增加
增加一个节点:
CREATE (me:Person {name:'我', born:2001})
增加关系和属性:
CREATE(boy:Person {name:'男孩', born:2001})-[:女朋友 {girlfriend:['瑞雪']}]->(girl:Person {name:'女孩', born:2003})
2、删除
删除一个节点:
MATCH (me:Person {name:'我', born:2001}) DELETE me
删除关系
MATCH(boy:Person {name:'男孩', born:2001})-[girlfriend:女朋友]->(girl:Person {name:'女孩', born:2003}) DELETE girlfriend
注意:如果存在关系,节点不能被删除。
3、改变
加上标签
MATCH (boy:Person) where id(boy)=1 set boy:帅 RETURN boy
加上属性
MATCH(boy:帅)where id(boy)=1 set boy.帅气值=100 RETURN boy
修改属性
MATCH(boy:帅)where id(boy)=1 set boy.帅气值=101 RETURN boy
4、查询
新增节点与关系
CREATE(boy:Dog {name:'小狗', born:2001})-[:女朋友 {girlfriend:['喜欢']}]->(girl:Cat {name:'小猫', born:2003})
查找关系
MATCH(boy:Dog)-[:女朋友]->(girl:Cat) RETURN boy,girl
MATCH和RETURN是Cypher关键字,boy是变量,保存节点,:Dog是节点标签,[:女朋友]是关系类型
二、电影图谱案例
1、创建
将电影数据插入到图表中:右边是一个巨大的代码块,包含由多个Create子句组成的单个Cypher查询语句。这将创建电影图形。
列出关系型数据库与图数据库对应的概念以便理解Cypher:
MySQL | Neo4j |
---|---|
Database 关系型数据库 | Graph 图数据库 |
Table 表格 | Lable 标签 boy:Person |
Volumn 列 | Property 属性 {name:‘男孩’, born:2001} |
Row 行 | Node 节点 (boy:Person{name:‘男孩’, born:2001}) |
点击灰色代码块,注意它被复制到上面的编辑器,点击编辑器右上角的播放按钮执行等待查询完成显示。
节点Node | 含义(图数据库中的一个具体的实体) |
---|---|
橙色 | 代表一位电影的参演者或者导演 |
紫色 | 代表一个电影 |
标签Label | 含义(同一类节点的组合) |
---|---|
Person | 代表所有的电影的参演者或者导演 |
Movie | 代表所有的电影 |
关系Relationship | 含义(图数据库中节点之间的连接) |
---|---|
ACTED_IN | 代表某人参演某电影 |
DIRECTED | 代表某人导演了某电影 |
属性Property | 含义(对节点以及关系的一种说明) |
---|---|
Person | born:出生日期, name:姓名 |
Movie | release:发行年份, tagline:介绍, title:电影名称 |
注意:每次运行将数据添加到当前数据库!
2、查找
检索单个电影和演员:单击任何查询示例—>运行来自编辑器的查询—> 请注意语法模式—>尝试查看其他电影或演员
找到名叫“Tom Hanks”的演员
MATCH (tom {name: "Tom Hanks"}) RETURN tom
找到标题为“Cloud Atlas”的电影
MATCH (cloudAtlas {title: "Cloud Atlas"}) RETURN cloudAtlas
找到10个人
查询Person标签的所有节点的指定的属性name,并限制查询人数数量10
MATCH (people:Person) RETURN people.name LIMIT 10
查找20世纪90年代上映的电影
MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title
3、检索
在图中查找到相关的演员和导演:演员是在电影中表演的人,导演是指导电影的人。
列出所有Tom Hanks的电影
MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
谁导演了《Cloud Atlas》?
MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) RETURN directors.name
Tom Hanks的合作演员
MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) RETURN directors.name
人们是如何与“Cloud Atlas”联系在一起的
MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) RETURN people.name, Type(relatedTo), relatedTo
4、路径
Bacon Path:可变长度模式的内置的最短路径的算法
电影和演员离Kevin Bacon最多4步之遥
MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood)
RETURN DISTINCT hollywood
查找和Meg Ryan的最短关系路径
MATCH p=shortestPath(
(bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})
)
RETURN p
5、推荐
让我们为Tom Hanks推荐新的合作演员。一个基本的推荐方法是找到经过直接邻居的连接,这些邻居本身连接良好。
对Tom Hanks来说,这意味着:找到Tom Hanks还没有合作过的演员,但他的合作演员已经合作过了。找个能把Tom Hanks介绍给他潜在的合作演员的人。
扩展Tom Hanks的合作演员,寻找没有与Tom Hanks合作过的合作演员
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
WHERE NOT (tom)-[:ACTED_IN]->()<-[:ACTED_IN]-(cocoActors) AND tom <> cocoActors
RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC
找个人把Tom Hanks介绍给Tom Cruise
MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
(coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
RETURN tom, m, coActors, m2, cruise
6、清理
完成实验后,可以删除电影数据集。
同时删除节点和关系,将删除所有Person和Movie节点!
删除所有Movie和Person节点及其关系
MATCH (n) DETACH DELETE n
证明电影图表已经消失了
查询所有数据
MATCH (n) RETURN n