首页 > 解决方案 > 在 Java 中创建数据库时如何使用 Neo4j APOC?

问题描述

我没有使用 Neo4j 桌面创建我的 Neo4j 数据库,而是从头开始在 Java 应用程序中创建它。我通常有两个 csv 文件:一个节点文件和一个关系文件。因此,我分两步创建我的数据库:首先使用 Cypher 查询创建所有节点,然后使用另一个 Cypher 查询创建这些节点之间的所有关系(我使用“GraphDatabaseService”类中的“execute”方法)。我的问题是现在我需要为这些关系创建动态类型,所以我需要使用 APOC 库(具体来说,'CALL apoc.merge.relationship')。我知道这个库必须使用 Neo4j 桌面安装,然后您可以通过在其上键入 Cypher 查询来创建您的数据库。但是我需要使用“CALL apoc.merge.relationship”在我的 Java 代码中从头开始创建一个数据库。

谢谢 :)

标签: neo4jcypherneo4j-apoc

解决方案


首先,您需要在项目中导入 APOC jar:

<dependency>
    <groupId>org.neo4j.procedure</groupId>
    <artifactId>apoc</artifactId>
    <version>3.4.0.1</version>
</dependency>

然后您需要手动注册要使用的 APOC 程序:

            GraphDatabaseService db = ...
            Procedures procedures = ((GraphDatabaseAPI) db).getDependencyResolver().resolveDependency(Procedures.class);
            List<Class<?>> apocProcedures = asList(Coll.class, apoc.map.Maps.class, Json.class, Create.class, apoc.date.Date.class, FulltextIndex.class, apoc.lock.Lock.class, LoadJson.class,
                    Xml.class, PathExplorer.class, Meta.class, GraphRefactoring.class);
            apocProcedures.forEach((proc) -> {
                try {
                    procedures.register(proc);
                } catch (KernelException e) {
                    throw new RuntimeException("Error registering "+proc,e);
                }
});

来自这里的代码https://github.com/neo4j-contrib/rabbithole/blob/87f6a386027bdd236c37b74afa986b188dc6c69a/src/main/java/org/neo4j/community/console/Neo4jService.java#L51-L65


推荐阅读