To represent the node, property and relationship.
*******
Pattern不知道該怎麼翻譯比較好。
說是模式、形式應該都可以,重點在內容的呈現。
對於Neo4j這個NoSQL型態的圖資料庫而言。
每一筆資料可以是一個節點Node
節點的表達就是用( )包起來呈現
例如節點的名稱叫做a01,這節點就是(a01)
每個節點之間可以有關係,就是用箭號的形式表達。
請發揮你的想像力,用簡單的ASCII字元聯想
--> 總共三個字元構成了一個箭號
一對一的關係,徐玄是少女
(SeoHyun)-->(SNSD)
把徐玄指向少女時代就好
如果要表達一對多的關係呢?例如:徐玄跟Jessica都是少女
可以寫成兩個表達式
(SeoHyun)-->(SNSD),
甚至更直接,一個就夠了
(SeoHyun)-->(SNSD)<
一個包含節點與關係的組合,稱為Path
標籤可以作為節點的標記,呈現方式是 :標籤名稱
例如 :SNSD
有一個叫做徐玄的節點,註記是少女時代:
(SeoHyun:SNSD)
使用標籤也是沒問題的,例如要多一個韓國人的標籤:
(SeoHyun:SNSD:Korean)
節點可以定義屬性,Neo4j裡面很像是一個JSON的表達方法。
屬性需要包在節點裡面,然後用大括號呈現。
例如一個節點徐玄,姓名Seo Hyun 性別是女。
然後生日部分,出生年是1991,日期6月28日。
在Neo4j的完整呈現方式如下(請容許我都翻成英文):
(SeoHyun {name:"Seo Hyun", gender:"female", year: 1991, date:"Jun.28"})
屬性的定義是為了日後的查詢操作。
節點跟節點之間原本沒有關係,可以讓他們發生關係。
並針對這個關係命名。
例如Jessica跟Crystal有姊妹的關係。
就可以這樣呈現 (Jessica)-[:SISTER]-(Crystal)
關係也可以是有向性的,例如Eric知道Jessica
因為Jessica是公眾人物,而阿宅我本人只是一個知道他的人。
Jessica並不知道我是誰
(Eric)-[:KNOWS]->(Jessica)
看得出來吧?基本上箭號那個線條就是兩個-構成 --
然後在中間插入[: 關係名稱] 就是有向的關係定義了
不若用來描述節點的標籤(label)可以有很多種
關係只能有一種,並沒有「開放式的交友關係」
所以可以用 | 來呈現多種關係的存在。
例如(Eric)-[:KNOWS|FANS_OF]->(Jessica)
語意上就是Eric知道Jessica或者說Eric是Jessica的粉絲。
關於關係的建立,該如何寫入資料庫中,之後說明。
當然,雙向關係也是可以的。
例如在夢中Jessica也認識Eric我本人。
(Eric)<-[:KNOWS]->(Jessica)
關係還有遠近之分,也就是有幾層?
現在就不要再舉少女時代的例子了,
最實際的,就是朋友之間的關係。
我們生活中常常有以下對話:
「張三是那個我叫李四的朋友的朋友」
用Cypher表達節點與關係,就是
(Me)-->(李四)-->(張三)
這就是兩層的關係,可以用層級表達我跟張三的關係
(Me)->[*2]->(張三)
如果關係更複雜,想要表達我跟張三間3到5層的關係。
就是(Me)->[*3.. 5]->(張三)
表達3層以後的關係 (Me)->[*3.. ]->(張三)
表達小於5層的關係 (Me)->[*.. 5 ]->(張三)
表達任何曾的關係 (Me)->[*]->(張三)
套用到實際查詢上的語法範例:
MATCH (me)-[:KNOWS*1.. 2]-(friends)
WHERE me.name = "Eric"
RETURN friends.name
意義就是請Neo4j幫我找出跟我有認識的朋友關係
這邊定義了兩個臨時宣告的變數節點me還有friends
因為是變數,還要更明確的指出我的名字是Eric
所以有結合WHERE的條件與property是name要等於字串"Eric"
最後再回傳friends的節點名字
看得出來被指到friends的節點,應該都具備跟Eric節點類似的內容。
至少有name這個屬性就是了。
此外,整個「路徑」也可以用一個變數接受傳遞
例如 path = (me)-[*3.. 5]-(potential_friends)
在使用MATCH查詢時,最後如果是RETURN path
就會列出所有3到5層的關係
*******
這篇網誌還沒有講到更複雜的關係建立。
只是單純的介紹Neo4j的一些呈現形式。
建議先搞清楚({})這樣的節點跟屬性包裝,有助於後續的關係推廣。
原始的官方參考資料在這,覺得我寫的很爛請直接參考原文。
您也許同樣感興趣的文章:
Neo4j: Cypher語法筆記:一般表達形式 Expressions
沒有留言:
張貼留言