天天看點

圖資料庫——Neo4j(二)Cypher模式Node聯系MARCH RETURNCREATE、DELETE

Cypher是Neo4j專門用于圖資料庫的查詢語言,類似于Oracle資料庫的SQL語言,是一種聲明式查詢語言,隻需要使用者描述需要執行什麼動作(match、insert等),而不需要描述具體怎麼做,需要注意的是,隻有在商業版中,Cypher的查詢語句編譯器才會生成高性能的查詢動作. 同時Cypher項目中又建立了一個支援Spark的項目,Cypher for Apache Spark

Neo4j裡面提供了多種不同的通路方式,包括

  • 通過一個HTTP API執行Cypher查詢,并擷取JSON格式的結果;
  • 一種“非托管擴充”機制,允許你為Neo4j資料庫編寫自己的終結點;
  • 通過一個高層Java API指定節點與關系的周遊;
  • 通過一個低層的批量加載API處理海量初始資料的擷取;
  • 通過一個核心Java API直接通路節點與關系,以獲得最大的性能;

首先需要介紹,Neo4j能夠存儲的圖資料的類别,其中包括

- 節點名稱(node-name)  和  節點标簽名稱(label-name)
- 節點的屬性和屬性值{properties-list}
- 聯系名稱(relationship-name)  和  聯系标簽(relationship-label-name)
- 聯系的屬性和屬性值{properties-list}
           

節點是圖中的實體,它可以儲存任意數量的屬性(鍵值對),同時通過标簽進行标記,來表示在建構的具體領域中的不同角色. 聯系提供了兩個實體節點之間的,具名有向邊,兩個節點之間可以擁有任意數量的關聯聯系.

模式

同時在Cypher裡面有一個很重要的概念,就是模式. 節點和關聯關系組成特定的圖結構模型,模式的描述形式可以是連續,也可以通過逗号間隔,在Neo4j裡提供一下例子:

朋友的朋友: (user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf)
查詢最短距離: path = shortestPath( (user)-[:KNOWS*..]-(other) )
協同過濾 (user)-[:PURCHASED]->(product)<-[:PURCHASED]-()-[:PURCHASED]->(otherProduct)
樹查詢 (root)<-[:PARENT*]-(leaf:Category)-[:ITEM]->(data:Product
           

以上的模式描述可以被用到MATCH和CREATE語句裡,用于比對傳回特定模式的資料

Node

表示為:

(<node1-name>:<node1-label-name>{<define-properties-list>})
           

Eg:

(video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
           

聯系

表示為:

[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
           

Eg:

圖資料庫——Neo4j(二)Cypher模式Node聯系MARCH RETURNCREATE、DELETE

上圖所示的,兩個實體以及兩個實體之間的聯系以以下形式模組化:

(video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
-[movie:ACTION_MOVIES{rating:1}]->
(video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"})
           

關聯關系的方向性通過 -[relation]-> 表示.

以下主要介紹Cypher中的一些主要語句

MARCH RETURN

  • MATCH: 比對相應的模式
  • RETURN:傳回資料
MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof)
RETURN john.name, fof.name
           

以上比對的模式就是節點名稱為“john”的朋友的朋友是節點名稱為“fof”,傳回john和fof節點的name屬性

CREATE、DELETE

CREATE

  • 建立沒有屬性的節點
  • 使用屬性建立節點
  • 在沒有屬性的節點之間建立關系
  • 使用屬性建立節點之間的關系
  • 為節點或關系建立單個或多個标簽
  • 直接建立節點
CREATE (you:Person {name:"You"})
RETURN you
           
  • 通過比對模式建立節點
MATCH  (you:Person {name:"You"})
CREATE (you)-[like:LIKE]->(neo:Database {name:"Neo4j" })
RETURN you,like,neo
           
MATCH (you:Person {name:"You"})
FOREACH (name in ["Johan","Rajesh","Anna","Julia","Andrew"] |
CREATE (you)-[:FRIEND]->(:Person {name:name}))
           

DELETE

待續…..

資料來源:

neo4j.com