模式和模式比對是Cypher的核心,使用模式來描述所需資料的形狀,該模式使用屬性圖的結構來描述,通常使用小括号()表示節點,-->表示關系,-[]->表示關系和關系的類型,箭頭表示關系的方向。
用小括号表示節點模式:<code>(a),</code>a是節點變量的名稱,用于引用圖中的某一個節點a。
對于匿名的節點,可以使用()來表示,匿名的節點無法引用,通常用來表示路徑中的占位節點。
1,标簽模式
在節點變量的後面,使用 :Lable 來表示标簽,标簽是節點的分組,一個節點可以有一個标簽,也可以有多個标簽,
比如,<code>(a:User),(a:User:Admin)</code>
2,指定屬性
節點和關系都有屬性,屬性模式可以使用Map結構來表示,屬性模式的格式是{ key:value,..},使用大括号表示一個字典,包含一個或多個鍵/值對:
關系模式是由節點和路徑來描述的,最簡單的關系模式兩個節點和一個路徑:
該模式表示節點a和節點b之間存在關系,不指定關系的方向。
1,關系的名稱和方向
關系也可以被命名,Cypher使用[r]來表示關系變量:
關系是有方向的,使用箭頭指定關系的方向:
注意:圖中關系的方向是在建立關系時指定的,在執行Cypher查詢時,如果指定關系的方向,那麼沿着關系的方向進行模式比對。
2,關系類型
就像節點具有标簽,可以對節點進行分組,關系也可以分組,Neo4j按照關系的類型對關系進行分組
但是不像節點可以有多個标簽,關系隻能由一個關系類型,但是,關系的類型可以屬于一個集合,這使用 | 來分割,表示關系輸入集合中的任意一個類型:
路徑是由節點和關系構成的序列,在路徑中節點和關系是交替相連的,不可中斷。路徑的長度是指關系的數量,固定長度的路徑是指:路徑中關系的數量是固定不變的,可變長度的路徑是:指路徑中關系的數量是可變的。關系的數量有兩種表示方式:固定長度和變長。
固定長度的關系,使用[* n]來表示
變長的關系,使用[*start..end]來表示,其中 .. 表示關系的長度是可變的,start表示關系數量的最小值,end表示關系數量的最大值。
注:start和end都可以省略,如果省略start,那麼關系的長度 <= end;如果省略end,那麼關系的長度>=start;如果同時省略start和end,那麼關系的長度是任意的。
在變長關系模式中,也可以指定關系的類型:[Type * start .. end ],變長關系隻能用于MATCH查詢語句中,不能用于CREATE和MERGE語句中。
1,固定長度的關系
在關系[]中,使用*2表示關系的長度為2,使用該模式來表示路徑,路徑兩端的節點是a和b,路徑中間的節點是匿名的,無法通過變量來引用。
該模式描述了3個節點和2個關系,路徑兩端的節點是a和b,中間節點是匿名節點,等價于以下的模式:
2,變長關系
在關系[]中,使用[*start .. end]來表示變長關系
3,路徑變量
Cypher允許對Path命名,把Path指派給變量p,路徑模式可以使用p來表示:
4,舉個例子
有如下的有向圖資料,按照有向圖來計算路徑,最長的路徑長度是2;按照無向圖來計算路徑,最長的路徑長度是6。

分析以下Cypher查詢,在路徑模式中,路徑是無向的,路徑的長度是1或2,關系的類型是KNOWS,節點Filipa和節點remote_friend在同一條路徑中,