1. 程式人生 > >neo4j的搭建和例項使用

neo4j的搭建和例項使用

一. 簡介

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

這樣就只篩選得到的是以“蘇洵”為頂點的三級結構,依次是“蘇洵”-->“蘇軾”-->“蘇孫”

可看到只有一條資料