apoc.refactor.categorize

此过程已弃用。请参阅下文了解如何使用 Cypher 进行重构的建议。

详细信息

语法

apoc.refactor.categorize(sourceKey, type, outgoing, label, targetKey, copiedKeys, batchSize)

描述

根据图中具有指定 sourceKey 属性键的 NODE(节点),创建新的分类 NODE。新的分类 NODE 随后将通过给定类型的 RELATIONSHIP(关系)连接到原始 NODE

输入参数

名称

类型

描述

sourceKey

STRING

要添加到新节点上的属性键。

type

STRING

连接到新节点的关系类型。

outgoing

布尔值 (BOOLEAN)

关系是否应为出站关系。

标签 (label)

STRING

新节点的标签。

targetKey

STRING

在新节点上引用源键值的名称。

copiedKeys

LIST<STRING>

要复制到新节点的其他属性键列表。

batchSize

INTEGER(整数)

每个批次的最大处理数量。

使用 Cypher 重构节点

在 Cypher 中,无需使用 APOC 即可动态引用节点标签和关系类型。

用于动态创建、匹配和合并标签与类型的 Cypher 语法
CREATE (n1:$(label))-[r:$(type)]->(n2:$(label))
MERGE (n1:$(label))-[r:$(type)]->(n2:$(label))
MATCH (n1:$(label))-[r:$(type)]->(n2:$(label))

动态计算出的类型必须求值为 STRINGLIST<STRING>。更多信息,请参阅 Cypher 手册 → CREATEMERGEMATCH

使用 CALL {…​} IN CONCURRENT TRANSACTIONS 可以在 Cypher 中实现批处理和并行执行。有关更多信息,请参阅 事务中的 CALL 子查询 → 并发事务

使用示例

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

CREATE (:Movie {title: 'A Few Good Men', genre: 'Drama'});

使用此过程需要属性唯一性约束:.创建属性唯一性约束

CREATE CONSTRAINT FOR (n:`Genre`) REQUIRE n.`name` IS UNIQUE

以下示例将 Movie 节点上的 genre 属性转换为一个带有 Genre 标签和 name 属性的新节点。同时还会创建一个从 Movie 节点指向该流派节点的 GENRE 关系。

apoc.refactor.categorize
CALL apoc.refactor.categorize('genre', 'GENRE', true, "Genre", "name", [], 100)
MATCH p=()-[:GENRE]->()
RETURN p
使用 Cypher 的 MERGE 和 REMOVE 子句
MATCH (n) WHERE n.genre IS NOT NULL
MERGE (n)-[:GENRE]->(:Genre {name: n.genre})
REMOVE n.genre
WITH *
MATCH p=()-[:GENRE]->()
RETURN p
结果
p

(:Movie {title: 'A Few Good Men'})-[:GENRE]→(:Genre {name: 'Drama'})

apoc.refactor.categorize.usage
图 1. 新的图结构