由於開始學習知識圖譜,因此需要涉及到neo4j的使用
一、介紹
neo4j是一個圖形數據庫基於Java開發而成,因此需要配置jvm才可以運行
配置請參考我前面的一篇blog:https://www.cnblogs.com/future-dream/p/9533757.html
二、基本操作
1、添加
(1)節點的添加
關鍵字:create;n是一個對象,用什么都可以,它的可以就是標簽;節點信息(采用字典的格式):包括name、skill、master等等信息,這些key最后會作為property(屬性)出現在property keys的內容中。
create (n:華山{name:"令狐沖", skill:"易筋經", master:"岳不群"})
結果:
1)創建一個節點
2)創建多個節點

(2)關系的添加
首先是獲取兩個關系對象,比如在添加"岳不群"和"令狐沖"的關系的時候,先建立兩個對象,找出這兩個點
在通過對象指明的標簽,根據具體的屬性值來查找出兩個節點信息,最后用create (a) - [r:師徒] ->(b);來創建關系(注:關系有方向)
match (a:華山), (b:華山) where a.name = "岳不群" and b.name = "令狐沖" create (a)-[r:師徒]->(b);
結果:
(3)屬性的增加
首先確定節點的位置, 然后使用set函數來增加和修改屬性,如果屬性存在就修改,如果屬性不存在則添加
match (e:明教) set e.position = "master";
結果:
1)增加屬性
2)修改屬性
(4)跨標簽建立關系
建立兩個對象,然后建立的同時限定對象,最后用 create (object) - [r:relationship] -> (object),完成跨標簽關系的建立
match (n:華山{name:"令狐沖"}), (m:衡山{name:"莫大"}) create (n) - [r:朋友] -> (m);
結果:
2、查找
(1)單節點查詢
首先建立查找對象然后通過標識找出對應的節點
match (e:華山) where e.name = "令狐沖" return e
結果:
(2)整個label查詢
與前面的操作一樣,首先要建立一個對象(e)后面接標簽確定要查找的節點信息,最后返回信息
match (e:華山) return e;
結果:
(3)關系查詢
1)整體關系查詢
查找所有師徒關系的節點,並返回結果。p1,p2依舊是對象,同時用一個R來接收這些信息。
match R = (p1:華山) - [r:師徒] ->(p2) return R;
結果:
2)單個關系查詢
加入p1和p2的限定條件就可以完成單個數據查詢(注:由於關系是有方向的因此不可以交換否則數據查找會出現none)
match R = (p1:華山) - [r:師徒] ->(p2) where p1.name="岳不群" and p2.name="令狐沖" return R;
結果:
正確結果
空值結果
3、刪除
先匹配后進行刪除操作(注:必須先刪除關系,后刪除節點,否則無法刪除節點)
(1)關系刪除
delete r,n就可以將數據和關系全部刪除,選擇帶關系的就全部刪除關系,選擇帶節點就全部刪除節點
MATCH (n:令狐沖) - [r:朋友] -> (m:莫大) delete r;
結果:
(2)節點刪除
MATCH (n:武當) delete n;
結果:
(3)屬性標簽刪除
建立對象然后進行條件限定,在刪除屬性
MATCH (n:衡山{name:"莫大"}) remove n.id;
結果:
4、修改
如上建立一個華山的對象,用set函數來完成屬性值的修改(注:限定條件,否則數據全部修改,導致錯誤)
MATCH (e:華山{name:"令狐沖"}) set e.skill = "吸星大法"
結果:
三、總結
通過上訴介紹了關於neo4j的基本操作,因此可以通過Python來完成連接。
(1)寫一個易於理解的公式:
match (object:label{}), (object:label{}) set/create object.attribute = "content";
先進行匹配隨便建一個對象object接收label里面的內容,{}里面加入限定條件,在逗號之后可以多次創建,一般是用來創建關系才會使用,再接方法。
(2)建立關系的方法:
create (object) - [r:relationship] -> (object)
由於前面我們已經建立了兩個對象,因此直接使用就可以了,其中的r也是任意的,它是關系對象的標識。
(3)限制條件的方法:
where object.attribute = "content"
前面的對象加上對相應的屬性,在設置content就可以了。
其中除了attribute和content需要引號處理,其他的可以用中文。
四、參考
參考文檔:http://neo4j.com.cn/public/cypher/neo4j_cql_remove.html
