Awesome Procedures On Cypher for Neo4j - codenamed "apoc" If you like it, please ★ above ⇧
APACHE-2.0 License
:readme: :branch: 4.4 :docs: https://neo4j.com/labs/apoc/4.4 :apoc-release: 4.4.0.32 :neo4j-version: 4.4.38 :img: https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/{branch}/docs/images
https://community.neo4j.com[image:https://img.shields.io/discourse/users?logo=discourse&server=https%3A%2F%2Fcommunity.neo4j.com[Discourse users]] https://discord.gg/neo4j[image:https://img.shields.io/discord/787399249741479977?logo=discord&logoColor=white[Discord]]
= Awesome Procedures for Neo4j {branch}.x
// tag::readme[]
== Introduction
// tag::intro[] image::{img}/apoc.gif[float=right]
// tag::intro-text[] 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.
The APOC library consists of many (about 450) procedures and functions to help with many different tasks in areas like data integration, graph algorithms or data conversion. // end::intro-text[]
=== License
Apache License 2.0
// tag::name-history[] === "APOC" Name history
// tag::name-history-text[] http://matrix.wikia.com/wiki/Apoc[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 http://neo4j.com/blog/convenient-package-neo4j-apoc-0-1-released/[A Package Of Component^] for Neo4j in 2009.
APOC also stands for "Awesome Procedures On Cypher" // end::name-history-text[] // end::name-history[]
== Installation: With Neo4j Desktop
// tag::install-desktop[]
APOC Full can be installed with http://neo4j.com/download[Neo4j Desktop], after creating your database, by going to the Manage
screen, and then the Plugins
tab.
Click Install
in the APOC box and wait until you see a green check mark near "APOC".
// end::install-desktop[] image::{img}/desktop-apoc.jpg[width=800]
== Feedback
// tag::feedback[] Please provide feedback and report bugs as https://github.com/neo4j-contrib/neo4j-apoc-procedures/issues[GitHub issues] or join the https://community.neo4j.com/t5/tag/apoc/tg-p[Neo4j Community Forum and ask with the APOC tag^]. // end::feedback[]
// tag::calling-procedures[]
== Calling Procedures & Functions within Cypher
// tag::usage[] 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/{branch}/core/src/test/resources/person.json' AS url
CALL apoc.load.json(url) YIELD value as person
// end::usage[] // end::calling-procedures[]
// end::intro[]
== APOC Procedures & Functions Overview
All included procedures are listed in the link:{docs}/overview[overview in the documentation^] and detailed in subsequent sections.
=== Built in Help
// tag::help[] image::{img}/apoc-help-apoc.jpg[width=600]
[cols="1m,5"] |=== | call apoc.help('keyword') | lists name, description, signature, roles, based on keyword |===
// end::help[]
== Detailed Feature Documentation
See the link:{docs}[APOC User Guide^] for documentation of each of the major features of the library, including data import/export, graph refactoring, data conversion, and more.
// tag::signature[]
== 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 procedures signature in the output of CALL apoc.help("name")
The signature is always name : : TYPE
, so in this case:
.Parameter Explanation [opts=header,cols="m,m"] |=== | Name | Type h| Procedure Parameters | | startNode | Node | endNode | Node | relationshipTypesAndDirections | String | weightPropertyName | String h| Output Return Columns | | path | Path | weight | Float |===
// end::signature[]
== Manual Installation: Download latest release
// tag::install[]
Since APOC relies on Neo4j's internal APIs you need to use the matching APOC version for your Neo4j installaton. Make sure that the first two version numbers match between Neo4j and APOC.
Go to http://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/{apoc-release}[the latest release] for Neo4j version {branch} and download the binary jar to place into your $NEO4J_HOME/plugins
folder.
You can find http://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/[all releases here].
// end::install[]
== Manual Configuration
// tag::version-matrix[] === 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.
[opts=header] |=== |apoc version | neo4j version | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/4.4.0.1[4.4.0.1^] | 4.4.0 (4.3.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/4.3.0.4[4.3.0.4^] | 4.3.7 (4.3.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/4.2.0.9[4.2.0.9^] | 4.2.11 (4.2.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/4.1.0.10[4.1.0.10^] | 4.1.11 (4.1.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/4.0.0.18[4.0.0.18^] | 4.0.12 (4.0.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.5.0.15[3.5.0.15^] | 3.5.30 (3.5.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.4.0.8[3.4.0.8^] | 3.4.18 (3.4.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.3.0.4[3.3.0.4^] | 3.3.9 (3.3.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.2.3.6[3.2.3.6^] | 3.2.14 (3.2.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.1.3.9[3.1.3.9^] | 3.1.9 (3.1.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.0.8.6[3.0.8.6^] | 3.0.12 (3.0.x) | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.5.0.0[3.5.0.0^] | 3.5.0-beta01 | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.4.0.2[3.4.0.2^] | 3.4.5 | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.3.0.3[3.3.0.3^] | 3.3.5 | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.2.3.5[3.2.3.5^] | 3.2.3 | https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.1.3.8[3.1.3.8^] | 3.1.5 |===
// end::version-matrix[] === Get APOC Version
To know your current apoc
version you can use the function :
=== Using APOC with the Neo4j Docker image
// tag::docker[]
APOC Full can be used with the https://hub.docker.com/_/neo4j/[Neo4j Docker image] via the NEO4JLABS_PLUGINS
environment variable.
If we use this environment variable, the APOC plugin will be downloaded and configured at runtime.
We should see the following two lines in the output after running this command:
In a production environment we should download the APOC release matching our Neo4j version and, copy it to a local folder, and supply it as a data volume mounted at /plugins
.
plugins
directory and then mounts that folder to the Neo4j Docker containerIf you want to pass custom apoc config to your Docker instance, you can use environment variables, like here:
// end::docker[] // tag::build[]
=== Build & install the current development branch from source
// If you want to run embedded or use neo4j-shell on a disk store, configure your plugins
directory in conf/neo4j.conf
with dbms.plugin.directory=path/to/plugins
.
A full build including running the tests can be run by ./gradlew build
.
// end::build[] // tag::codestyle[] === Applying Code-style
To apply the https://github.com/diffplug/spotless/tree/main/plugin-gradle#how-do-i-preview-what-spotlessapply-will-do[spotless] code-style, run the above gradle command, this will remove all unused imports
// end::codestyle[]