模式是用於描述如何搜索數據,通常用 ()標識節點,用 [] 標識關係,看一下下面的幾種模式:
1. 節點模式
節點具有屬性和標籤,Cypher爲了引用節點,需要給節點命名:
- (n) :該模式用於描述節點,節點的變量名是n ;匿名節點是 ();
- (n:label) :該模式用於描述節點,節點具有特定的標籤,也可以指定多個標籤;
- (n:{name:'Brown'}) :節點具有name屬性,並且name屬性值是 Brown ,也可以指定多個屬性;
- (n:label{name:'Brown'}):節點具有特定的標籤和name屬性,並且name屬性值是Brown;
2. 關係模式
在屬性圖中,節點之間存在關係,關係通過[]表示,節點之間的關係通過 ()-[]->()表示,例如:
- [r]:該節點用於描述關係,關係變量名是 r;匿名關係是[];
- [r:type]:該模式用於描述關係,關係類型是type;每一個關係必須有且僅有一個類型;
- [t:type{name:'Bro'}]:關係的類型是type,並且name屬性是Bro;
3. 關聯節點模式
節點之間通過關係聯繫在一起,由於關係具有方向性,-->表示存在有向的關係,--表示存在關聯,不指定關係的方向,如:
- (a)-[r]->(b):該模式用於描述節點a和b之間存在有向的關係r;
- (a)-->(b):描述a和b之間存在有向的關係;
4. 變長路徑的模式
從一個節點,通過關係連接到另外一個節點,這個過程叫遍歷,經過的節點和關係的組合叫路徑(path),路徑是由節點和關係的有序組合。
- (a)-->(b):是步長爲1的路徑,節點a和b之間有關係直接關聯;
- (a)-->()-->(b):是步長爲2的路徑,從節點a經過兩個關係、1個節點到達節點b;
Cypher語言支持變長路徑的模式,變長路徑的表示方式是:[*N..M],N和M表示路徑長度最小值和最大值。
- (a)-[*2]->(b):表示路徑長度是2,起始節點a,終止節點b;
- (a)-[*3..5]->(b):表示路徑路徑長度最小值是3,最大值是5,起始節點是a,終止節點是b;
- (a)-[*..5]->(b):表示路徑的最大長度是5,起始節點是a,終止節點是b;
- (a)-[*3..]->(b):表示路徑的最小長度是3,起始節點是a,終止節點是b;
- (a)-[*]->(b):表示不限制路徑長度,起始節點a,終止節點b;
5. 路徑變量
路徑可以指定給一個變量,該變量是路徑變量,用於引用查詢路徑:
p=(a)-[*3..5]->(b)
例子:圖中有6個節點,每個節點都有一個屬性name,節點之間的關係類型是KNOWS,
如果要根據查詢模式,查詢跟Fillpa節點有關係的人,並限制路徑長度爲1或者2,可用如下查詢模式(注意這裏關係模式沒有方向性):
match (a)-[:KNOWS*1..2]-(b)
where a.name='Fillpa'
return b.name
返回結果爲:Dilshad或者Anders。