MATCH syntax in Neo4j is for search.
Search the node, relationship...
*******
基本上Neo4j的語法組成跟SQL很像。
MATCH跟SELECT的功能有點像。
就是挑出符合條件的資料,最後可以配合WHERE過濾。
MATCH符合的內容,最後被RETURN。
就是一個簡單的Cypher語法。
Neo4j官方有提供「沙盒」(Sandbox),你可以任意操作。
先介紹節點的搜尋
如果你想要Neo4j列出所有的節點,語法如下:
MATCH (n)
RETURN (n)
MATCH跟RETURN都是保留字,可以用小寫也沒關係。
節點是可以有標籤的(label)
如果要找到所有標籤為NCBI的節點
MATCH (journal:NCBI)
RETURN journal
journal就是代表節點的變數,:NCBI如同認知,是個標籤
(複習一下,標籤就是冒號:起頭,冒號右邊是標籤名稱)
現在要找有關係的節點(Related nodes)
以官方網站的語法例子為例
MATCH (director {name:"Oliver Stone"})--(movie)
RETURN movie.title
就是先找出一個path,主要是導演跟電影的關係
然後要回傳的是電影節點中的標題屬性
你可以測試RETURN的變化,去了解Neo4j的語法規則。
例如RETURN movie,會RETURN所有的東西,不只是Title
像那個director,也只是一個暫時指派的變數而已。
目的是方便理解,movie也是。
在實際設計的些語法的時候,本來就要考量可讀性跟維護性。
重點在{name:"Oliver Stone"}的地方,這是MATCH的關鍵。
要找到所有跟Oliver Stone有關係的電影。
(這是已經假設案例跟電影有關,Neo4j的沙盒網站預設的)
不信你可以把director跟movie換掉試試看。
繼續是搜尋有向的關係,網站的例子是
MATCH (martin {name:"Martin Sheen"})-->(movie)
RETURN movie.title
要找的是屬性名為Martin Sheen向外發展的節點
如果你從官方的沙盒細看,會發現查詢結果的關係是:ACTED_IN
指的是Martin Sheen有演過的電影,以他為中心出發的有向查詢
至於這層有向的關係是什麼呢?請繼續看官方的範例
MATCH (martin {name:"Martin Sheen"})-[r]->(movie)
RETURN r
也就是把上面的範例小改,多加入一個表示關係的r變數
現在RETURN查詢結果r,顯示所有的關係
關係可以是未知,只要有關係就全部列出來,如上例。
也可以列出已知關係的節點,像是我要知道誰有演某部電影。
官方網站的範例語法如下
MATCH (wall street {title:"Wall Street"})<-[:ACTED_IN]-(actor)
RETURN actor
這兩行語法,重點的地方在{title:"Wall Street"}還有 <-[:ACTED_IN]-
請特別注意我把關係的箭頭方向有列出來
就語意上的意思是我要找誰有在Wall Street這部電影中演出。
執行之後就會列出演員了。
再多一個小變化,就可以有多重關係的查詢結果
MATCH (wall street {title:"Wall Street"})<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person
現在要找的是Wall Street這部電影中,導戲跟演戲的人
原本那個actor也順勢換成person,目的是方便理解。
現在不只是找actor而已。
查詢多重關係也可以,例如想知道誰演某部電影、導演是誰。
然後現有條件只知道演員,可以用下列的範例語法:
MATCH (charlie {name:"Charlie Sheen"})-[:ACTED_IN]->(movie)<-[:DIRECTED]->(director)
RETURN charlie, movie, director
查詢結果會回傳三個「節點」,這是原本的範例內容。
一樣,可以自己變化。例如只回傳電影標題、導演名稱:
RETURN movie.title , director.name
想知道某演員演過的電影之間的可能關係,包含電影跟演員。
然後只要一到兩層的關係就好。
(我的理解是可能只想知道被查詢演員有跟誰又共演一齣戲。
這是根據下列查詢語法回應而推斷的)
MATCH (martin {name: "Martin Sheen"})-[:ACTED_IN*1..2]-(x)
RETURN x
執行之後只會列出被ACTED_IN關係最少一層,最多兩層的節點
*******
先寫到這樣,之後想到再補。
或者有需要可以參考官方網站資料,有非常華麗的功能。
例如尋找最短路徑。
沒有留言:
張貼留言