neo4j 初步認識和使用

介紹

圖形數據庫(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

web訪問

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 建立一個節點或關係
// 格式
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 查詢
// 查詢節點的某個屬性
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
  • relationship
// 給現有節點添加關係
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
  • label 一個節點有多個label
create (a:A:B...) ...

// match
match (a:A:B) 會返回label既是A也是B的node
match(a:A) 會返回A,也返回A:B,即label包含A的節點
  • delete 刪除節點或關係,在刪除節點前,必須先刪除其相關關係
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
  • remove 移除節點或關係的屬性,可在後面追加return
語法基本同delete
match (a:A) where ... remove a.p1 return ...

match (a:A)-[r:R]->(b:B)  where ... remove r.p2
  • set 添加或修改屬性
match (a:B) where ... set a.p1=v1
  • order by 按一個或多個屬性值排序返回結果, 默認是按升序,降序就在order列表後追加DESC
match (a:A) where ... return a.p1, a.p2, a.p3 order by a.p1,a.p2
  • union 鏈接返回結果(名字要相同),去除重複行.注意這裏的鏈接和關係型數據庫不相同,這裏只是將兩個return語句返回的結果列表拼接而已.
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

  • limit 限制返回結果的數量
match (a:A) return a limit 10 // 返回前10個結果
  • skip 跳過前面的結果數目
match (a:A) return a skip 10 // 跨過前十條結果
  • merge 命令在圖中搜索給定模式,若是存在,則返回結果,若是它不存在於圖中,則它建立新的節點/關係並返回結果。
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
  • null 若是return的屬性不存在,就會返回一個null做爲該屬性的值
match (a:A) where a.name is not null  // 查詢name值不爲null的節點,即有name屬性的節點
  • in 判斷屬性值是否在列表中
match (a:A) where a.name in ['given', 'zeng']
  • id 「Id」是節點和關係的默認內部屬性/home/zjw/Pictures/neo4j_import_relationship.png。 這意味着,當咱們建立一個新的節點或關係時,Neo4j數據庫服務器將爲內部使用分配一個數字。 它會自動遞增。最大值約爲35億
  • upper 轉大寫字母.lower同理
match (a:A) where ... return upper(a.p1) as p1
  • substring 它接受一個字符串做爲輸入和兩個索引:一個是索引的開始,另外一個是索引的結束,並返回從StartInded到EndIndex-1的子字符串。
match (a:A) where ... return substring(a.p1,0,10) as p1
  • 聚合countmaxsumminavg
match (a:A) where ... return count(*)

return max(a.age), min(a.age), avg(a.age), sum(a.age)
  • 關係函數.net

    • startnode 獲取關係的開始節點
    • endnode 關係的結束節點
    • id 關係的id
    • type 關係的類型type
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)
  • unique
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})

官方文檔

相關文章
相關標籤/搜索