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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM