初探Neo4J中的Cypher
由於RDF數據庫需要,需要調研圖形數據庫,選擇了Neo4J進行嘗試,發現它包含了一個名為“Cypher”的操作語言,使用了一下感覺非常不錯,所有有寫點東西的必要。 從官網上盜個圖:
其實,這個圖也就標識了cypher語言的基本功能,節點a到節點b,關系是LIKES,其操作的方法與sql的select一樣選擇符合某種條件的實體,由此強烈建議大家使用網頁版進行熟悉操作,比較直觀,可以直接得到圖形。
閒話少說,我們姑且成上面的為萬能公式,該萬能公式大體上分為兩個部分()與[],其中()表示某個節點可以當作是關系數據庫中的某條記錄或者RDF中的實體,[]表是某種關系,從而創建了實體與實體之間的關系;
之後根據萬能公式完成匹配和其他的操作,關鍵詞Match Return。
Match(a) Return a,含義表示返回所有的節點,其中a就是定義變量的方式;
Match(a:Person) Return a,返回所有Person類別的節點,其中Person類型在節點創建的過程中進行指定;
Match(a:Person:Teacher) Return a,返回所有Teacher同時屬於Person類別的節點(例子有點不恰當),從這個例子我們可以看出例子我們可以看出只要你想的到多少類別都可以;
除此之外,我們可以通過create創建節點;
create (:Person {name:"李晨"}),創建一個名為李晨的節點;
create (fan:Person {name:"范冰冰"}) return fan,創建一個名為范冰冰的節點,並返回,從這個裡面我們可以看到類型前面可以變量,需要說明的是即使你不加類型依然可以進行聲明;
Match(li:Person {name:"李晨"}) Match(fan:Person {name:"范冰冰"}) create (fan) -[:搞定]->(li) return fan,li,完成了關系,范冰冰 搞定 李晨;
最後,還需要說明的一個是shortestPath,顧名思義查找最短路徑,熟悉RDF的大概都能了解Relfinder功能,兩者功能類似,白話來講就是,找到一個小A和小B,他們之間有沒有關系呢,就是通過shortestPath方法來實現,起就是都過關系來規定幾度關系來進行推斷;
Match(a:Person {name:"小A"}) Match(b:Person {name:"小B"}) p= shortpath((a) -[:朋友*..2]->(b)) return a,b,p,返回所有小A和小B之間能產生二度以內好友關系的可能路徑。