Neo4j 使用cypher語言進行操作
Cypher語言是在學習Neo4j時用到數據庫操作語言(DML),涵蓋對圖數據的增刪改查
neo4j數據庫簡單除暴理解的概念:
Neo4j中不存在表的概念,只有兩類:節點(Node)和關聯(Relation),可以簡單理解爲圖裏面的點和邊。
在數據查詢中,節點一般用小括號(),關聯用中括號[]。
當然也隱含路徑的概念,是用節點和關聯表示的,如:(a)-[r]->(b),表示一條從節點a經關聯r到節點b的路徑。
備份Neo4j的數據:
1)停掉數據庫.
2)備份D:\Neo4J\neo4j-enterprise-1.9.1\data目錄下graph.db目錄中的所有內容.
3)在服務器上拷貝graph.db目錄中的內容到新的服務器的相同目錄中,啓動即可.
Cypher的基本操作
1)創建節點
create (a) 創建空節點
create (a:Person) 創建標籤(可以理解爲類)爲Person的節點
create (a:Person {name:‘Kaine‘,age:28}) 創建標籤爲Person,屬性name值爲Kaine,屬性age值爲28的節點
2)創建關聯
match (a),(b)
where a.name=‘Kaine‘ and b.name=‘Sharon‘
create (a)-[r]->(b) 創建a節點和b節點的路徑,此時變量r即代表關聯,它也可以有標籤
3)查詢關鍵字
match:用來匹配一定模式,可以是簡單的節點、關聯,也可以是複雜的路徑
where:用來限定條件,一般是限定match中的出現變量的屬性
return:返回結果
start:開始節點,一般用於有索引的節點或者關聯
match ... where ... return ...
如果match有多個對象,用逗號隔開;
如果where有多個條件,用and連接;
如果return有多個變量,用逗號隔開
4)查詢舉例講解
複製代碼
match (n) return n
查詢所有節點及關聯
match (a)-[r]->(b) where a.name=‘Kaine‘ return a,b
查詢屬性name的值是Kaine的節點,及其所有關聯節點
match (a)-[*1..3]->(b) where a.name=‘Kaine‘ return a,b
查詢屬性name值是Kaine的節點,及其所有距離爲1到3的關聯節點,
match (a)-[*2]->(b) where a.name=‘Kaine‘ and not (a)-[*1]->(b) return a,b
查詢屬性name的值是Kaine的節點,及其所有距離爲2並且去除距離爲1的節點。
(在計算好友的好友時會用到,即如果a、b、c三個人都認識,如果僅計算跟a距離爲2的人的時候會把b、c也算上,因爲a->b->c,或者a->c->b都是通路)
注:關聯的中括號內數字的含義
n 距離爲n
..n 最大距離爲n
n.. 最小距離爲n
m..n 距離在m到n之間
複製代碼
a.創建
CREATE (id:label {key:value})
id: 爲節點添加一個唯一ID,不設置則系統自動設置一個,不設置時是 CREATE (:label…
label: 標籤,生命節點類型
{}: 屬性定義,key/value格式
b.關係
-[role:label {roles: [“Neo”]}]->
– 表示一個無指向的關係
–> 表示一個有指向的關係
[] 能夠添加ID,屬性,類型等信息
另看:http://blog.csdn.net/wangweislk/article/details/47661863
複製代碼
按id查詢(這裏的id是系統自動創建的):
start n=node(20) return m;
查詢所有節點:
start n=node(*) return n;
查詢屬性,關係:
start n=node(9) return n,n.name,n.ID,n.level; //查看指定節點,返回需要的屬性
start n=node(*) match (n)-[r:SubClassOf]->m return m,n,n.name,n.ID,r; //查找指定關係
按關係查詢多個節點:
start a = node(14) match b-[r]<->a return r,b;
start a = node(0) match c-[:KNOWS]->b-[:KNOWS]->a return a,b,c; //查找兩層KNOWS關係的節點
start a = node(21) match b-[*]->a return a,b; //查找所有與a節點有關係的節點
使用Where條件進行查詢:(不用建立Index也可以使用)
start n=node(*) where n.name=”Activity” return n;
並且可以使用特定符號:
start n=node() where n.ID?=”A” return n;
start n=node(*) where HAS(n.type) return n,n.name,n.ID,n.type; //如果存在屬性type,並且以A開頭,就輸出節點。
配置文件自動建立索引:
修改conf目錄下的neo4j.properties文件內容如下,重啓Neo4J,對重啓後新建的Node生效。
Enable auto-indexing for nodes, default is false
node_auto_indexing=true
The node property keys to be auto-indexed, if enabled
node_keys_indexable=name,ID
Enable auto-indexing for relationships, default is false
relationship_auto_indexing=true
The relationship property keys to be auto-indexed, if enabled
relationship_keys_indexable=KNOWS,SubClassOf
建立索引後可以用node_auto_index按屬性值查詢:
start n=node:node_auto_index(name=”C”) return n,n.name;
修改屬性值:
start a = node(*) where a.name=”a” set a.name=”A” return a,a.name ;
start n=node(0) set n.name=”Root”,n.ID=”001” ; //給默認的根節點添加name,ID屬性,便於查詢。
刪除:
刪除所有節點和關係:
START n=node(*)
match n-[r]-()
delete n,r;
刪除所有節點以上方法過時,後面版本將被遺棄-推薦使用如下方法
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
複製代碼
圖形數據庫關係
一 概念
節點:
(a) //actors
(m) //movies
( ) //some anonymous nod
關係:
-[r]-> //a relationship referred to as “r”
(a)-[r]->(m) //actors having a relationship referred to as “r” to movies
-[:ACTED_IN]-> //the relationship type is ACTED_IN
(a)-[:ACTED_IN]->(m) //actors that ACTED_IN some movie
(d)-[:DIRECTED]->(m) //directors that DIRECTED some movie
屬性:
(m {title:”The Matrix”}) //Movie with a title property
(a {name:”Keanu Reeves”,born:1964}) //Actor with name and born property
(a)-[:ACTED_IN {roles:[“Neo”]}]->(m) //Relationship ACTED_IN with roles property (an array of character names)
標籤:
(a:Person) //a Person
(a:Person {name:”Keanu Reeves”}) //a Person with properties
(a:Person)-[:ACTED_IN]->(m:Movie) //a Person that ACTED_IN some movie
二 neo4j使用的查詢語言 cypher
http://www.uml.org.cn/sjjm/201203063.asp
查詢語言包含
START:在圖中的開始點,通過元素的ID或所以查找獲得。
MATCH:圖形的匹配模式,束縛於開始點。
WHERE:過濾條件。
RETURN:返回所需要的。
分享網站:http://www.cnblogs.com/rongyux/p/5537028.html
知識只有共享才能傳播,才能推崇出新的知識,才能學到更多,這裏寫的每一篇文字/博客,基本都是從網上查詢了一下資料然後記錄下來,也有些是原滋原味搬了過來,也有時加了一些自己的想法