简介

APOC 库已被拆分为两个独立的存储库:APOC Core 和 APOC Extended。APOC Core 由 Neo4j 官方支持。APOC Extended 不受 Neo4j 官方支持,由社区成员进行维护。

本文档涵盖了官方支持的 APOC 核心库 (APOC Core Library)

有关 APOC Extended 库的更多信息,请访问 APOC Extended 页面

Neo4j 支持 APOC (Awesome Procedures on Cypher) 核心库。APOC 核心库提供了对用户定义过程和函数的访问,这些过程和函数将 Cypher 查询语言 的使用扩展到了数据集成、图算法和数据转换等领域。

这些过程和函数是用 Java 实现的,可以部署到 Neo4j 实例中,然后直接通过 Cypher 调用。

APOC 核心库中所有可用函数和过程的完整列表可以在 过程与函数 (Procedures & Functions) 页面找到。

有关由 Neo4j 用户创新高级总监 Michael Hunger 介绍的 APOC 库的历史和发展的简短介绍,请观看此短视频。

APOC 可用性

APOC 可在 Neo4j AuraDB 中使用。有关 Aura 支持的 APOC 过程和函数的完整列表,请访问 Aura 的 APOC 页面。APOC 也可在 Neo4j SandboxDockerNeo4j Desktop 中使用。最后,通过安装 APOC jar 包,APOC 库也可用于自托管数据库。

示例

用户定义的函数可以像内置函数一样,用于任何表达式或谓词中。

过程可以使用 CALL procedure.name(); 进行独立调用。

过程也可以集成到 Cypher 语句中。

下面的示例演示了如何将 apoc.load.json 过程集成到 Cypher 语句中。

加载 JSON 示例
WITH 'https://raw.githubusercontent.com/neo4j/apoc/5.0/src/test/resources/person.json' AS url

CALL apoc.load.json(url) YIELD value as person

MERGE (p:Person {name: person.name})
   ON CREATE SET p.age = person.age, p.children = size(person.children)

有关使用特定 APOC 过程和函数的更多示例,请参阅 过程与函数 (Procedures & Functions) 页面。

关于 Neo4j 内存跟踪器的说明

在使用 APOC 库之前,请务必注意:Neo4j 内存跟踪器无法检测到 APOC 过程。因此,如果它们超过了数据库中的可用内存,它们将不会自动终止。

例如,如果达到了 db.memory.transaction.maxdb.memory.transaction.total.max 的限制,apoc.path.expand 过程将不会停止。

此外,无法使用 SHOW TRANSACTIONS YIELD currentQuery, estimatedUsedHeapMemory 命令来监控查询的内存使用情况。

为了避免 Java 堆空间 (Java Heap Space) 错误,使用 APOC 过程时应格外谨慎。