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