Neo4j图数据库高级应用系列 / 服务器扩展指南 (3.2) - 可配置的路径扩展过程

1. 定义

        可配置的路径扩展过程提供完整的配置参数来控制遍历过程。

2. 过程调用接口

 

 

 

过程接口

 

 

CALL apoc.path.expandConfig(
   startNode Node/list,
   { minLevel,
     maxLevel,
     relationshipFilter,
     labelFilter,
     bfs:true,
     uniqueness:'RELATIONSHIP_PATH',
     filterStartNode:true,
     limit,
     optional:false,
     endNodes,
     terminatorNodes,
     sequence,
     beginSequenceAtStart:true
   }
) YIELD path
 

参数名

类型

缺省值

可为空?

说明

startNode

LONG - 节点id,或者节点列表

遍历的起始节点。

{configuration}

配置选项列表

NULL

具体配置项参见下面的说明。

minDepth

INTERGER

0

最小遍历层次数。

maxDepth

INTEGER

-1

最大遍历层次数。-1表示不限制,直到不再有可遍历的路径为止。

relationshipFilter

字符串

NULL

关系过滤器规则,参见3.2.2

labelFilter

字符串

NULL

标签过滤器规则,参见3.2.1

bfs

布尔值

false

true – 宽度优先遍历

false – 深度优先遍历

uniqueness

字符串

NULL

唯一性规则,参见3.2.4。

filterStartNode

布尔值

false

是否过对起始节点应用过滤规则。

limit

正整数

-1

返回路径的数目上限。

optional

布尔值

false

true – 如果没有找到复合条件的路径,返回NULL值的序列;

false – 如果没有找到复合条件的路径,则不返回。

endNodes

节点列表

NULL

遍历终止节点列表。

terminatorNodes

节点列表

NULL

终止节点列表,参见3.2.1。

sequence

字符串

NULL

节点和标签过滤规则序列,参见3.2.3。指定sequence规则后labelFilter和relationshipFilter的内容会被忽略。

beginSequenceAtStart

布尔值

true

是否对起始节点应用sequence中定义的规则。

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

3. 示例

 

 

 

 

C
Y
P
H
E
R

 

 


// 3.4(1) 调用可配置的路径扩展过程,寻找三国时期有谁自己没当皇帝、

//          但是他的儿子当了皇帝的。

//  参数:- startNode:代表“朝代”的节点

//        - sequece: '朝代,<建立,皇帝,父子,-皇帝|人物'

//        - maxLevel: -1,遍历直到返回能够到达的所有路径

//  返回结果:曹操,司马昭 

MATCH (n:朝代)

WITH n

CALL apoc.path.expandConfig(n,

    { maxLevel: -1,

      sequence: '朝代,<建立,皇帝,父子,-皇帝|人物'

    }

) YIELD path

RETURN path
 

 

 

 

 

 

C
Y
P
H
E
R

 

 

// 3.4(2) 调用可配置的路径扩展过程,寻找三国时期为各国效力的文臣。

//

//  参数:- startNode:代表“朝代”的节点

//        - relationshipFilter: '<建立|父子|主公>'

//        - labelFilter: '+人物|>文臣'

//        - maxLevel: -1,遍历直到返回能够到达的所有路径

//  返回结果:排除既是“文臣”又是“皇帝”的人物。

MATCH (n:朝代)

WITH n

CALL apoc.path.expandConfig(n,

    { maxLevel: -1,

      relationshipFilter: '<建立|父子|主公>',

      labelFilter: '+人物|>文臣'

    }

) YIELD path

WITH nodes(path) AS nodes

WHERE NOT '皇帝' IN labels(nodes[-1])

RETURN nodes[0].name AS kingdom, nodes[-1].name AS advisor
 


---- 待续 ----
(下篇:3.4 搜索子图)

 

你可能感兴趣的:(Neo4j高级应用技术专题,APOC,图数据库,Cypher,Neo4j教程,Neo4j)