1. 程式人生 > >CQL(Cypher)基本操作(一)

CQL(Cypher)基本操作(一)

Neo4j

標籤屬性圖模型
• Nodes – 節點。在其他圖模型中稱作“點”、“頂點”、“物件”。
• Relationships – 關係。在其他圖模型中也稱作“邊”、“弧”、“線”。關係擁有型別。
• Properties – 屬性,可以定義在節點和關係上。
• Labels – 標籤,代表節點的類別。
這裡寫圖片描述
這裡寫圖片描述

Neo4j與MySQL

這裡有列出了一些與關係型資料庫對應的概念方便理解:
這裡寫圖片描述

動機
類似與關係型資料庫,建立了多個數據庫
想要像訪問關係型資料庫那樣來可以無縫切換多個數據庫
然而,在neo4j 3.0都暫時沒有辦法做到:每次啟動neo4j,它只能讀取一個數據庫。
比如,現在有兩個資料庫graph.db,graph2.db。假設neo4j預設的資料庫為graph.db,啟動neo4j,這時候想要訪問graph2.db,必須修改neo4j的配置檔案,將資料庫改為graph2.db,重啟,此時才可以訪問graph2.db.

那麼,如何可以比較neat地切換資料庫呢?

配置
Linux環境 同 部落格:neo4j遠端訪問

方法
方法一:修改配置檔案
這是官方文件方法
大概思路是:

新建一個conf_test檔案
修改neo4j.conf:

# The name of the database to mount
dbms.active_database=graph2.db //你的資料庫

將新的neo4j的配置檔案的路徑設為當前session的環境變數。
重啟neo4j
問題 來了,我每次都要先新建一個conf資料夾,修改conf檔案,再設定環境變數,據麻煩!!!

方法二:建立graph.db的軟連線【推薦!!!】
(突然走向了大甩賣的風格了 -_-#)

不需要修改配置檔案,不需要設定環境變數

首次修改:
// 請將$NEO4j_HOME改為你的neo4j的安裝路徑

cd $NEO4j_HOME/data/databases/
// 儲存原來資料庫
mv graph.db graph1.db
//建立指向新資料庫的軟體接
ln -s graph2.db graph.db

//重啟neo4j
cd $NEO4j_HOME/bin
./neo4j restart

再次修改
倘若我想訪問graph3.db,就很簡單了

//建立指向新資料庫的軟體接

ln -s graph3.db graph.db

//重啟neo4j
cd $NEO4j_HOME/bin
./neo4j restart

CQL基本簡介

Neo4j使用Cypher查詢圖形資料,Cypher是描述性的圖形查詢語言,語法簡單,功能強大,由於Neo4j在圖形資料庫家族中處於絕對領先的地位,擁有眾多的使用者基數,使得Cypher成為圖形查詢語言的事實上的標準
CQL代表Cypher查詢語言。 像Oracle資料庫具有查詢語言SQL,Neo4j具有CQL作為查詢語言。

Cypher語言的關鍵字不區分大小寫,但是屬性值,標籤,關係型別和變數是區分大小寫的
這裡寫圖片描述

CQL資料型別

S.No.CQL資料型別用法
1.boolean用於表示布林文字:true,false。
2.byte用於表示8位整數。
3.short用於表示16位整數。
4.int用於表示32位整數。
5.long用於表示64位整數。
6.floatI用於表示32位浮點數。
7.double用於表示64位浮點數。
8.char用於表示16位字元。
9.String用於表示字串。

常用CQL命令與函式

通過常用命令實現圖資料的增刪改查

S.No.CQL命令/條用法
1。CREATE
建立
建立節點,關係和屬性
2。MATCH
匹配
檢索有關節點,關係和屬性資料
3。RETURN
返回
返回查詢結果
4。WHERE
哪裡
提供條件過濾檢索資料
5。DELETE
刪除
刪除節點和關係
6。REMOVE
移除
刪除節點和關係的屬性
7。

ORDER BY

以…排序

排序檢索資料
8。SET
新增或更新標籤

常用函式

S.No.定製列表功能用法
1。String
字串
它們用於使用String字面量。
2。Aggregation
聚合
它們用於對CQL查詢結果執行一些聚合操作。
3。Relationship
關係
他們用於獲取關係的細節,如startnode,endnode等。

圖資料的形式

這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

基本語法

節點

節點必須包含在括號 () 內

(n:Label1:Label2)

• 標籤名前必須有冒號
• 節點可以有多個標籤
• 標籤對節點進行分類,似關係資料庫中的表 標籤對節點進行分類,類似關係資料庫中的表

(n)

節點可以沒有或者不指定標籤

(n:Label {prop: 'value'})

節點可以有屬性

關係

關係兩端各有一個短橫線 /減號,用方括包含關係型別 ,關係型別名前面必須有冒號 (:) 。在其中一端用 >或 < 代表關係的方向,也可以沒有方向

  - -  ,<- -,- ->
  -[:DIRECTED]- ->

關係以短劃線\減號和方括號包含
與標籤一樣關係型別前必須要有“:”

- ->或 -[r:TYPE] ->

關係在建立時必須指定方向
關係在查詢時可以不指定方向表示雙向關係

< >指定關係的方 向

關係也可以有屬性

-[:KNOWS {since: 2010}]

模式

模式是由關係連線起來的節點構成的表示式,關係可以是有方向的,也可以沒有方向,雙向的

() -[] -()
() -[] ->()
()< -[] -()

模式的例子

(n:Label {prop:'value'})-[:TYPE]- >(m:Label)
  • 最基本的模式:由一類關係連線兩個節點 最基本的模式:
  • 由一類關係連線兩個節點
(p1:Person {name:'Alice'}) -[:KNOWS][->(p2:Person {name:'Bob'})

如果存在從Alice到Bob的、型別為KNOWS的關係,那麼上面模式會將匹配的節點儲存在 p1 和p2中。

Cypher查詢的組成部分

eg1.
這裡寫圖片描述
eg 2.
這裡寫圖片描述
eg 3.
這裡寫圖片描述

圖查詢的結果 vs表狀資料結果

eg 4.
這裡寫圖片描述

這裡寫圖片描述

命名規範

這裡寫圖片描述