圖形數據庫(Graph Database)是NoSQL數據庫家族中特殊的存在,用於存儲豐富的關係數據,Neo4j 是目前最流行的圖形數據庫,支持完整的事務,在屬性圖中,圖是由頂點(Vertex),邊(Edge)和屬性(Property)組成的,頂點和邊均可以設置屬性,頂點也稱做節點,邊也稱做關係,每一個節點和關係均可以由一個或多個屬性。Neo4j建立的圖是用頂點和邊構建一個有向圖,其查詢語言cypher已經成爲事實上的標準。node
模型規則web
w3c上面的教程和官網也能夠參考正則表達式
1. tar -xvf 壓縮包 2. cd 解壓文件/bin 3. neo4j install
啓動 sudo service neo4j start 或者 sudo neo4j start 關閉 sudo service neo4j stop 或者 sudo neo4j stop
http://localhost:7474/browser/
初始用戶爲neo4j,密碼爲neo4j,登陸後須要更改密碼.web端的教程見w3c.但我更喜歡在命令行訪問數據庫
參考https://neo4j-client.net/ ,安裝以下:服務器
sudo add-apt-repository ppa:cleishm/neo4j sudo apt-get update sudo apt-get install neo4j-client libneo4j-client-dev
登陸: 默認端口是7687.密碼是neo4j或你登陸web端後更改的密碼函數
neo4j-client -u neo4j localhost 7687 :quit //退出
你能夠在neo4j-client命令行登陸後更改密碼:ui
CALL dbms.changePassword('your new password')
// 格式 create (node_name:lable_name { property1_name:property1_value p2:v2 p3:v3 }); // node_name 類型於關係型數據庫的表的別名 // label_name 相似於代表同樣,代表一類實體 // 例子 create (dog:DOG{name:"dog_name",age:20});
// 查詢節點的某個屬性 match(node_name:node_label) where node_name.p1=v1 return node.p3 as p3 // 查詢整個節點 match(node_name:node_label) where node_name.p1=v1 and/or node_name.p2>v2 return node_name // 例如 match (dog:Dog) where dog.name = 'dog_name' return dog
// 給現有節點添加關係 match (a:A),(b,B) where a.p1=p1 and b.p2=v2 or ... create (a)-[r:R{p3:v3,p4:v4,...}]->(b) // 新建節點的同時建立關係,甚至能夠在後面追加return create (a:A{...})-[r:R{...}]->(b:B{...}) return r // 查詢關係 match (a:A)-[r:R]->(b:B) where a.p1=v1 or r.p2=v2 and b.p3=v3 return r
create (a:A:B...) ... // match match (a:A:B) 會返回label既是A也是B的node match(a:A) 會返回A,也返回A:B,即label包含A的節點
match (a:A) where a.p1=v1 delete a match (a:A) where a.p1=v1 delete a.p1 match (a:A) delete a // 刪除全部A\B之間的R關係 match (a:A)-[r:R]->(b:B) delete r // 同時刪除關係和節點 match (a:A)-[r:R]->(b:B) where a.p1=v1 delete a,b,r
語法基本同delete match (a:A) where ... remove a.p1 return ... match (a:A)-[r:R]->(b:B) where ... remove r.p2
match (a:B) where ... set a.p1=v1
match (a:A) where ... return a.p1, a.p2, a.p3 order by a.p1,a.p2
match (a:A) return a.p1 as p1, a.p2 as p2 union match (b:B) return b.p1 as p1, b.p3 as p2
union all 同上,只是不去除重複行spa
match (a:A) return a limit 10 // 返回前10個結果
match (a:A) return a skip 10 // 跨過前十條結果
merge (a:A{p1:v1})-[r:R{...}]->(b:B{...}) 至關於 match (a:A)-[r:R]->(b:B) where a.p1=v1 and r... and b.... return a,r,b if a或b或r不存在, 就create
match (a:A) where a.name is not null // 查詢name值不爲null的節點,即有name屬性的節點
match (a:A) where a.name in ['given', 'zeng']
match (a:A) where ... return upper(a.p1) as p1
match (a:A) where ... return substring(a.p1,0,10) as p1
match (a:A) where ... return count(*) return max(a.age), min(a.age), avg(a.age), sum(a.age)
關係函數.net
MATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN STARTNODE(movie)
create index on a:A (p1) create index on :A (p1) drop index on :A (p1)
create constraint on (a:A) assert a.p1 is unique
where exists (a.name) //節點存在屬性 where n.name contains 'giv' // 屬性包含 where a.name starts with 'g' // 屬性開頭 where a.name ends with 'n' //屬性結尾 where n.name=~'.*ive.*' // 使用正則表達式
csv格式:第一行是字段名,後面是每一個字段的值命令行
p1,p2 v1,v2 v1,v2 ...
load csv with headers from "file path" as line merge (a:A{p1:line.p1, p2:line.2})