neo4j的搭建和例項使用
阿新 • • 發佈:2018-12-22
一. 簡介
neo4j是當今最流行的圖資料庫,基於 節點+關係 的架構,儲存了圖形資料的基本元素。同時,資料庫也支援通過基礎資料元素和獨特的CQL查詢語法,快速方便的檢索、構建複雜的圖表關係結果。
二. 基礎知識
windows安裝方法: 安裝方法
CQL基本語法:基本語法
三. 例項
我想構建一個父子繼承關係的圖表結構,以蘇洵蘇軾家族為例,先建節點node如下:
create(suxun:Person_{name:"蘇洵",age:80,sex:"男"}) create(sushi:Person_{name:"蘇軾",age:53,sex:"男"}) create(suzhe:Person_{name:"蘇轍",age:51,sex:"男"}) create(suxiaomei:Person_{name:"蘇小妹",age:45,sex:"女"}) create(susun:Person_{name:"蘇孫",age:29,sex:"男"}) create(suxiaosun:Person_{name:"蘇重孫",age:6,sex:"女"})
其中有些節點人名為虛構,為了建立例項方便。 因為我資料庫中先前已有Person標籤名做了其他的測試,為避免重複和歧義,本例中標籤名起為"Person_"。
對於節點之間的關係,為 :
蘇洵-------|------蘇軾 --------------蘇孫 ---------------蘇重孫
|------蘇轍
|------蘇小妹
因此建立結構的CQL為:
match(p1:Person_),(p2:Person_) where p1.name="蘇洵" and p2.name = "蘇軾" create (p1) -[parent:Parent{relation:"父親"}]-> (p2); match(p1:Person_),(p2:Person_) where p1.name="蘇洵" and p2.name = "蘇轍" create (p1) -[parent:Parent{relation:"父親"}] -> (p2); match(p1:Person_),(p2:Person_) where p1.name="蘇洵" and p2.name = "蘇小妹" create (p1) -[parent:Parent{relation:"父親"}] -> (p2); match(p1:Person_),(p2:Person_) where p1.name="蘇軾" and p2.name = "蘇孫" create (p1) -[parent:Parent{relation:"父親"}] -> (p2); match(p1:Person_{name:"蘇孫"}),(p2:Person_{name:"蘇重孫"}) create (p1) -[parent:Parent{relation:"父親"}] -> (p2);
其中有兩種方法:
- 第一種用where進行節點篩選,例如 where p1.name="蘇洵" and p2.name = "蘇軾"
- 第二種用屬性進行節點篩選,例如match(p1:Person_{name:"蘇孫"}),(p2:Person_{name:"蘇重孫"})
兩種方法都可以達到效果
最終結果為:
match(a)-[r:Parent]->(b) return a, r, b
使用match進行篩選,並且拼裝成樹狀結構:
1. 篩選出子孫綿延四代的樹幹
match(a)-[r1:Parent]->(b)-[r2:Parent]->(c)-[r3:Parent]->(d) return a, b, c, d
2. 篩選出存在三代子孫的樹幹
match(a)-[r1:Parent]->(b)-[r2:Parent]->(c) return a, b, c
可以發現,查出來的圖形雖然是隻有一條鏈路,但其實代表兩條資料,各三級節點,如下
那如果要查詢某個節點開始的三級結構呢?
3. 篩選出某個節點為頂點的三代子孫樹幹
match(a{name:"蘇洵"})-[r1:Parent]->(b)-[r2:Parent]->(c) return a, b, c
這樣就只篩選得到的是以“蘇洵”為頂點的三級結構,依次是“蘇洵”-->“蘇軾”-->“蘇孫”
可看到只有一條資料