“电影关系图”实例将电影、电影导演、演员之间的复杂网状关系作为蓝本,使用Neo4j创建三者关系的图结构,虽然实例数据规模小但五脏俱全。

步骤:

一、 创建图数据:将电影、导演、演员等图数据导入Neo4j数据库中

cypher语句:

 CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)

每个cypher的意思如下,但是要整体运行,否则他们的关系不会连在前面8句中创建的节点上,因为最后面的7句运用到了前面CREATE时的变量,比如:最后一行JoelS变量就是对应的第8行的JoelS。单独运行也会产生关系,但是节点是Neo4j自动生成的,只有一个id,如下:

这个查询ACTED_IN类型的关系,上面的绿色和蓝色为整体运行cypher产生的,底下的全红是单独运行产生的,点击中间红点,可以看见左下角只有Neo4j自己生成的id(138)。

下面每步骤为单独运行和解释cypher:

1. 创建电影节点

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})

此cypher语句使用CREATE指令创建了一个Movie节点。这个节点带有3个属性,{title:'The Matrix', released:1999, tagline:'Welcome to the Real World'},分别代表电影标题,发行时间,宣传词。btw:The Matrix(黑客帝国)带你进入程序世界,程序员必看电影。

单独运行完之后则创建了一个节点如下:

2. 创建人物节点

CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})

此7句cypher创建了7个Person节点,每个节点有2个属性。查看如下图:

3. 创建演员导演关系

CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)

CREATE下面前4行创建演员与电影的关系,后3句创建导演与电影的关系。

(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)的意思是演员Keanu在电影TheMatrix中扮演Neo角色roles:['Neo']。

(LillyW)-[:DIRECTED]->(TheMatrix)的意思是LillyW导演了[:DIRECTED]电影TheMatrix。

运行完此语句形成如下图:

可见此图中节点是Neo4j自动生成的,这个138是从最上面第一张图中得到的。因为创建关系这条语句找不到节点变量Keanu、TheMatrix等。

二、检索节点

运行整体cypher图数据结构创建完成后,下面介绍检索相关操作。

1. 查找人员

a. 查找名为Carrie-Anne Moss的人

MATCH (m {name: "Carrie-Anne Moss"}) RETURN m

b. 查询谁导演了The Matrix

MATCH (m:Movie {title: "The Matrix"})-[:DIRECTED]-(n) RETURN n.name

这个例子使用了电影关系图中完整cypher的一小部分,完整cypher贴到下篇

cypher-refcard : https://neo4j.com/docs/cypher-refcard/current/

Neo4j电影关系图的更多相关文章

  1. Neo4j电影关系图Cypher

    , tagline:'Welcome to the Real World'}) }) }) }) }) }) }) }) CREATE (Keanu)-[:ACTED_IN {roles:['Neo' ...

  2. neo4j 实战、实例、示例 创建电影关系图 -1

    1. 创建关系 因为代码占篇幅太大,创建整个"电源关系图"的代码在文章最下方. 2. 简单分析创建语句 2.1 创建电影节点 CREATE (TheMatrix:Movie {ti ...

  3. 什么是实体关系图(ERD)? 转

    https://www.visual-paradigm.com/cn/guide/data-modeling/what-is-entity-relationship-diagram/#erd-data ...

  4. 什么是关系图 (ERD)?

    首先,什么是实体关系图? 实体关系图,也称为ERD,ER图或ER模型,是一种用于数据库设计的结构图.一个ERD包含不同的符号和连接器,它们可视化两个重要信息:系统范围内的主要实体,以及这些实体之间的相 ...

  5. Ambari服务依赖关系图生成脚本

    1. 生成服务依赖关系 #!/usr/bin/python import sys import commands import json def genDependString(ip): url=&q ...

  6. Echarts3 关系图-力导向布局图

    因为项目需要,要求实现类似力导图效果的图,我就瞄上了echarts. 注意事项1:由于我的项目要部署到内网,所以js文件要在本地,网上大多力导图都是echarts2的,而其又依赖zrender基础库, ...

  7. (转)整体把握jQuery -jQuery 的原型关系图

    整体把握jQuery -jQuery 的原型关系图 (原)http://www.html5cn.org/article-6529-1.html 2014-7-2 17:12| 发布者: html5cn ...

  8. 使用MySQL Workbench导出MySQL数据库关系图

    1. 点击MySQL Workbench中间Data Modeling下的Create EER Model From Existing Database: 2. 在Stored Connection中 ...

  9. tcp/ip协议栈调用关系图

    最近阅读了tcp/ip详解卷2,总结一下整个发送过程和接收过程 sendmsg \/ sendit \/ sosend(这一步将数据从用户空间拷贝到内核空间,并且会在这一步判断发送缓存空间是否充足,是 ...

随机推荐

  1. Ubuntu16.04下配置laravel

    参考 http://tecadmin.net/install-laravel-framework-on-ubuntu/# 本人亲试,完全正确 注意: Step 4 – Set Encryption K ...

  2. List.Sort() 小小技巧--- 从大到小排列

    List.sort() 默认的情况下是从小到大的排列. 例如: List<int> list = new List<int>();             list.Add(- ...

  3. 微信小程序把玩(三)tabBar底部导航

    原文:微信小程序把玩(三)tabBar底部导航 tabBar相对而言用的还是比较多的,但是用起来并没有难,在app.json中配置下tabBar即可,注意tabBar至少需要两个最多五个Item选项 ...

  4. C#实现判断图形文件格式的方法

    1. 通过文件的扩展名来判断.这种方法比较简单,但若是有人故意改下文件扩展名,这种方法就不起作用了. 2.通过C#自身提供的方法来进行判断(判断某种确定的图片类型). 示例如下: bool isJPG ...

  5. chrome 浏览器的常用命令收录

    chrome://settings(设置) chrome://extensions(扩展程序) chrome://history(历史记录) chrome://settings/clearBrowse ...

  6. SVN更新报错问题(Please execute the 'Cleanup' command)

    SVN更新报错问题(Please execute the 'Cleanup' command) https://segmentfault.com/a/1190000012571289 svn: E20 ...

  7. CAP碎碎念

    整个2017年都在搞大数据平台,完全远离了机器学习,甚至都不记得写过类似ETL的job. 从数据到平台,从业务处理到基础服务. Metrics的收集,报警,生成报表.Data pipeline的准确性 ...

  8. [迟到的万圣节向]可怕的python

    什么?python简单易懂好学可读性高灵活耐用扩展好? 预测下面几个小段落的输出,来看看这个能过几关? ============================ Stage 1 预测下列输出 def ...

  9. 条款10:令operator= 返回一个reference to *this

    关于赋值,可以写成连锁形式: int x, y, z; x = y = z = 15; //赋值连锁形式 赋值采用右结合律,故上述赋值被解析为: x = (y = (z = 15)); 为了实现连锁赋 ...

  10. happy machine learning(Second One)

    发现机器学习就根本停不下来 今天来用RNN算法来爽爽僵尸网络宿主预测 首先我们下载好数据,然后打开我们可爱的熊猫 import numpy as np import pandas as pd impo ...