1、概述
路徑擴展過程(Path Expanding)是從指定的一個或一組起始節點開始,根據過濾規則沿着特定關係依次訪問其他相連節點的過程。該過程迭代執行,直到沒有更多相連節點或者預設的結束條件滿足時終止。路徑擴展可以看作是圖的遍歷(Graph Traversal)的一種實現方式。
2、應用
在Cypher中也可以實現圖的遍歷。APOC的路徑擴展過程除了調用方法不一樣以外,還具有下面的優勢:
1) 更加多樣的遍歷方式。
2) 更加細粒度的遍歷過程控制。
3) 更好的執行性能。
4) 可擴展性更好。
3、過程接口
CALL apoc.path.expand(
startNode <id>|Node,
relationshipFilter,
labelFilter,
minDepth,
maxDepth )
YIELD path AS <identifier>
參數名 類型 缺省值 可爲空? 說明
startNode LONG - 節點id,或者Node - 節點對象 無 否 遍歷的起始節點
relationshipFilter 關係過濾器規則 NULL 是 參見3.2.2
labelFilter 標籤過濾器規則 NULL 是 參見3.2.1
minDepth INTERGER 0 是 最小遍歷層次數。
maxDepth INTEGER -1 是 最大遍歷層次數。-1表示不限制,直到不再有可遍歷的路徑爲止。
4、示例數據
**(注意:因爲在線文本編輯器的原因,下面查詢中文本的引號不能正確顯示,請做必要的替換後執行)**
// 3.3A 創建三國人物關係圖
CREATE (n1:`人物`:`皇帝`:`文臣`:`武將` {name: '劉備'})
-[:兄長]-> (n2:`人物`:`武將` {name: '關羽'}),
(n2) -[:兄長]-> (n3:`人物`:`武將` {name: '張飛'}),
(n1) -[:兄長]-> (n3),
(n1) -[:主公]-> (n4:`人物`:`武將` {name: '趙雲'}),
(n1) -[:父子]-> (n5:`人物`:`皇帝`:`文臣` {name: '劉禪'}),
(n1) -[:主公]-> (n6:`人物`:`文臣` {name: '諸葛亮'}),
(n5) -[:主公]-> (n4),
(n5) -[:主公]-> (n6),
(a1:`朝代`{name:'蜀漢'}) -[:對手]-> (a2:`朝代`{name:'曹魏'}),
(a3:`朝代`{name:'西晉'}) -[:取代]-> (a2),
(m1:`人物`:`文臣` {name: '曹操'})
-[:父子]-> (m2:`人物`:`文臣`:`皇帝` {name: '曹丕'}),
(m1) -[:父子]-> (m3:`人物`:`文臣` {name: '曹植'}),
(m2) -[:兄長]-> (m3),
(m1) -[:主公]-> (m4:`人物`:`文臣` {name: '司馬懿'}),
(m4) -[:父子]-> (m5:`人物`:`文臣` {name: '司馬昭'}),
(m5) -[:父子]-> (m6:`人物`:`文臣`:`皇帝` {name: '司馬炎'}),
(n1) -[:建立{year:221}]-> (a1),
(m2) -[:建立{year:220}]-> (a2),
(m6) -[:建立{year:266}]-> (a3)
運行上面的Cypher查詢會得到以下三國人物關係圖:
5、樣例查詢
// 3.3(1) 調用基本路徑擴展過程,從“蜀漢”節點出發遍歷圖。
// 參數:- startNode:代表“蜀漢”的節點
// - relationshipFilter: NULL
// - labelFilter: NULL
// - minLevel: 0
// - maxLevel: -1,遍歷直到返回能夠到達的所有路徑
// 返回結果:所有170條路徑、15個節點、19個關係。
MATCH (n:朝代{name:'蜀漢'})
CALL apoc.path.expand(n,NULL,NULL,0,-1) YIELD path
RETURN path
// 3.3(2) 調用基本路徑擴展過程,從“蜀漢”節點出發遍歷圖。
// 參數:- startNode:代表“蜀漢”的節點
// - relationshipFilter: NULL
// - labelFilter: -朝代,即遍歷到其他“朝代”節點終止。
// - minLevel: 0
// - maxLevel: -1,遍歷直到返回能夠到達的所有路徑
// 返回結果:蜀漢的所有人物。
MATCH (n:朝代{name:'蜀漢'})
CALL apoc.path.expand(n,NULL,'-朝代',0,-1) YIELD path
RETURN path
// 3.3(3) 調用基本路徑擴展過程,從“蜀漢”節點出發遍歷圖。
// 參數:- startNode:代表“蜀漢”的節點
// - relationshipFilter: NULL
// - labelFilter: +皇帝|朝代
// - minLevel: 0
// - maxLevel: -1,遍歷直到返回能夠到達的所有路徑
// 返回結果:三國時期的所有朝代及其皇帝。
MATCH (n:朝代{name:'蜀漢'})
CALL apoc.path.expand(n,NULL, '+皇帝|朝代',0,-1) YIELD path
RETURN path
---- 待續 ----
(下篇:3.2 可配置的路徑擴展過程)