用Java创建数据库时如何使用Neo4j APOC?

时间:2018-07-10 08:50:32

标签: neo4j cypher neo4j-apoc

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

谢谢:)

1 个答案:

答案 0 :(得分:0)

首先,您需要在项目中导入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