Awesome Procedures for Neo4j 5.10.0.x (Extended)
Introduction
Neo4j 3.x introduced the concept of user-defined procedures and functions. Those are custom implementations of certain functionality, that can’t be (easily) expressed in Cypher itself. They are implemented in Java and can be easily deployed into your Neo4j instance, and then be called from Cypher directly.
As of 5.0 APOC has been split into separate repositories, one being the main, officially supported, APOC Library. The other belonging to APOC Extended. This repository handles the extended part of APOC.
There are over 150 different procedures and functions in the Extended APOC library. Their purpose is to increase functionality in areas such as data integration, graph algorithms and data conversion.
License
Apache License 2.0
"APOC" Name history
Apoc was the technician and driver on board of the Nebuchadnezzar in the Matrix movie. He was killed by Cypher.
APOC was also the first bundled A Package Of Component for Neo4j in 2009.
APOC also stands for "Awesome Procedures On Cypher"
Feedback
Please provide feedback and report bugs as GitHub issues or join the Neo4j Community Forum and ask with the APOC tag.
Calling Procedures & Functions within Cypher
User defined Functions can be used in any expression or predicate, just like built-in functions.
Procedures can be called stand-alone with CALL procedure.name();
But you can also integrate them into your Cypher statements which makes them so much more powerful.
WITH 'https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/5.4/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 Overview
All included procedures are listed in the overview in the documentation and detailed in subsequent sections.
Detailed Feature Documentation
See the APOC User Guide for documentation of each of the major features of the library, including data import/export, graph refactoring, data conversion, and more.
Procedure & Function Signatures
To call procedures correctly, you need to know their parameter names, types and positions. And for YIELDing their results, you have to know the output column names and types.
INFO:The signatures are shown in error messages, if you use a procedure incorrectly.
You can see the procedure’s signature in the output of CALL apoc.help("name")
CALL apoc.help("dijkstra")
The signature is always name : : TYPE
, so in this case:
apoc.algo.dijkstra (startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?)
Name | Type |
---|---|
Procedure Parameters |
|
|
|
|
|
|
|
|
|
Output Return Columns |
|
|
|
|
|
Manual Installation: Download the latest release
Since APOC relies on Neo4j’s internal APIs you need to use the matching APOC version for your Neo4j installation. Make sure that the first two version numbers match between Neo4j and APOC.
Go to here for all the APOC extended releases and download the binary jar to place into your $NEO4J_HOME/plugins
folder.
Manual Configuration
Warning
|
For security reasons, procedures and functions that use internal APIs are disabled by default. Loading and enabling APOC procedures and functions can be configured using the Neo4j config file. For more details, see the APOC installation documentation. |
Version Compatibility Matrix
Since APOC relies in some places on Neo4j’s internal APIs you need to use the right APOC version for your Neo4j installaton.
APOC uses a consistent versioning scheme: <neo4j-version>.<apoc>
version.
The trailing <apoc>
part of the version number will be incremented with every apoc release.
apoc version | neo4j version |
---|---|
5.10.0 (5.10.x) |
|
5.9.0 (5.9.x) |
|
5.8.0 (5.8.x) |
|
5.7.0 (5.7.x) |
|
5.6.0 (5.6.x) |
|
5.5.0 (5.5.x) |
|
5.4.0 (5.4.x) |
|
5.3.0 (5.3.x) |
|
5.2.0 (5.2.x) |
|
5.1.0 (5.1.x) |
|
4.4.0 (4.4.x) |
Using APOC with the Neo4j Docker image
To use APOC with Docker; download the APOC release matching your Neo4j version and copy it to a local folder, supplying it as a data volume mounted at /plugins
.
plugins
directory and then mounts that folder to the Neo4j Docker containermkdir plugins
pushd plugins
wget https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/5.10.0/apoc-5.10.0-extended.jar
popd
docker run --rm -e NEO4J_AUTH=none -p 7474:7474 -v $PWD/plugins:/plugins -p 7687:7687 neo4j:5.4
If you want to pass custom apoc config to your Docker instance, you can use environment variables, like here:
docker run \
-p 7474:7474 -p 7687:7687 \
-v $PWD/data:/data -v $PWD/plugins:/plugins \
--name neo4j-apoc \
-e NEO4J_apoc_export_file_enabled=true \
-e NEO4J_apoc_import_file_enabled=true \
-e NEO4J_apoc_import_file_use__neo4j__config=true \
neo4j
Build & install the current development branch from source
git clone https://github.com/neo4j-contrib/neo4j-apoc-procedures cd neo4j-apoc-procedures sudo ./gradlew --init-script init.gradle shadow cp build/extended/libs/apoc-<version>-extended.jar $NEO4J_HOME/plugins/ $NEO4J_HOME/bin/neo4j restart
A full build including running the tests can be run by sudo ./gradlew --init-script init.gradle build
.
Note that --init-script init.gradle
is not needed if you already loaded the gradle changes (e.g. via IntelliJ)
Applying Code-style
./gradlew spotlessApply
To apply the spotless code-style, run the above gradle command, this will remove all unused imports