|| apoc.meta.subGraph - APOC 核心文档 - Neo4j 文档

apoc.meta.subGraph

此过程返回只能由其他 APOC 过程访问的虚拟节点和关系。欲了解更多信息,请参阅虚拟节点与关系 (图投影)

此过程在多线程环境下运行不安全。因此,并行运行时不支持此过程。欲了解更多信息,请参阅Cypher 手册 → 并行运行时

详情

语法

apoc.meta.subGraph(config) :: (nodes, relationships)

描述

检查给定的子图并返回一个元图。

输入参数

名称

类型

描述

config

MAP

{ excludeLabels :: LIST<STRING>, includeLabels :: LIST<STRING>, includeRels :: LIST<STRING>, maxRels = -1 :: INTEGER, sample = 1 :: INTEGER }

返回参数

名称

类型

描述

nodes

LIST<NODE>

代表元数据的节点。

relationships

LIST<RELATIONSHIP>

代表元数据的关系。

配置参数

此过程支持以下配置参数

配置参数
名称 类型 默认 描述

includeLabels

LIST<STRING>

[]

要包含的标签。默认为包含所有标签。

includeRels

LIST<STRING>

[]

要包含的关系类型。默认为包含所有关系类型。

excludeLabels

LIST<STRING>

[]

要排除的标签。默认为不排除任何标签。

sample

INTEGER

1

检查其关系以消除误报的节点数量。请参阅下面的“采样”部分。

maxRels

INTEGER

100

要分析的关系数量,按关系类型和起始/结束标签分类,以移除/添加因采样结果而错误插入/未插入的关系。

采样

此过程通过使用数据库统计信息来工作。每个标签返回一个新节点,其连接关系根据 [:R]→(:N) 和 (:M)→[:R] 的配对组合计算。例如,对于图 (:A)-[:R]→(:B)-[:R]→(:C),路径 (:B)-[:R]→(:B) 将根据 [:R]→(:B) 和 (:B)-[:R] 的组合计算得出。此过程默认会后处理数据,移除所有不存在的关系。这通过扫描节点及其关系来完成。如果未找到关系,则将其从最终结果中移除。这会降低过程速度,但会生成准确的 schema。

请参阅apoc.meta.graphSample以避免执行任何后处理。

还可以指定要扫描的节点和关系的数量。配置参数 sample 给出跳过计数,而 maxRels 参数给出每个节点将检查的最大关系数量。如果 sample 设置为 100,这意味着每个标签每第 100 个节点将被检查,maxRels 设置为 100 意味着对于读取的每个节点,只读取前 100 个关系。请注意,如果设置了这些值,并且在这些约束范围内未找到关系,则假定该关系不存在,这可能会导致假阴性。

如果 sample 值高于该标签的节点数量,则会检查一个节点。

已废弃参数
名称 类型 默认 描述

labels

LIST<STRING>

[]

已废弃,请使用 includeLabels

rels

LIST<STRING>

[]

已废弃,请使用 includeRels

excludes

LIST<STRING>

[]

已废弃,请使用 excludeLabels

使用示例

本节中的示例基于以下示例图

CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (TomH:Person {name:'Tom Hanks', born:1956})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})
CREATE (TheMatrixRevolutions:Movie {title:'The Matrix Revolutions', released:2003, tagline:'Everything that has a beginning has an end'})
CREATE (SomethingsGottaGive:Movie {title:"Something's Gotta Give", released:2003})
CREATE (TheDevilsAdvocate:Movie {title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})

CREATE (YouveGotMail:Movie {title:"You've Got Mail", released:1998, tagline:'At odds in life... in love on-line.'})
CREATE (SleeplessInSeattle:Movie {title:'Sleepless in Seattle', released:1993, tagline:'What if someone you never met, someone you never saw, someone you never knew was the only someone for you?'})
CREATE (ThatThingYouDo:Movie {title:'That Thing You Do', released:1996, tagline:'In every life there comes a time when that thing you dream becomes that thing you do'})
CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})

CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixReloaded)
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixRevolutions)
CREATE (Keanu)-[:ACTED_IN {roles:['Julian Mercer']}]->(SomethingsGottaGive)
CREATE (Keanu)-[:ACTED_IN {roles:['Kevin Lomax']}]->(TheDevilsAdvocate)

CREATE (TomH)-[:ACTED_IN {roles:['Joe Fox']}]->(YouveGotMail)
CREATE (TomH)-[:ACTED_IN {roles:['Sam Baldwin']}]->(SleeplessInSeattle)
CREATE (TomH)-[:ACTED_IN {roles:['Mr. White']}]->(ThatThingYouDo)
CREATE (TomH)-[:ACTED_IN {roles:['Zachry', 'Dr. Henry Goose', 'Isaac Sachs', 'Dermot Hoggins']}]->(CloudAtlas)

CREATE (LillyW)-[:DIRECTED]->(TheMatrix);
CALL apoc.meta.subGraph({
  includeLabels: ["Person", "Movie"],
  includeRels: ["DIRECTED"]
});
apoc.meta.subGraph filter
图 1. 元子图
© . This site is unofficial and not affiliated with Neo4j, Inc.