zoukankan      html  css  js  c++  java
  • Neo4j电影关系图

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

    步骤:

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

    cypher语句:

     1 CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
     2 CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
     3 CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
     4 CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
     5 CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
     6 CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
     7 CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
     8 CREATE (JoelS:Person {name:'Joel Silver', born:1952})
     9 CREATE
    10   (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
    11   (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
    12   (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
    13   (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
    14   (LillyW)-[:DIRECTED]->(TheMatrix),
    15   (LanaW)-[:DIRECTED]->(TheMatrix),
    16   (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/

  • 相关阅读:
    unity编辑器扩展
    unity给localRotation赋值
    ASp.net常用服务
    二叉树
    Photon Server类函数介绍
    线程间操作无效: 从不是创建控件的线程访问它的三种方法
    使用vs的输出窗口进行调试输出数据
    Bmob后端云之云数据库的使用
    软件设计的七大原则
    Unite Beijing 2018 参会简要分享
  • 原文地址:https://www.cnblogs.com/zeppelin/p/9134456.html
Copyright © 2011-2022 走看看