neo4j - 在 Java 中创建数据库时如何使用 Neo4j APOC?
问题描述
我没有使用 Neo4j 桌面创建我的 Neo4j 数据库,而是从头开始在 Java 应用程序中创建它。我通常有两个 csv 文件:一个节点文件和一个关系文件。因此,我分两步创建我的数据库:首先使用 Cypher 查询创建所有节点,然后使用另一个 Cypher 查询创建这些节点之间的所有关系(我使用“GraphDatabaseService”类中的“execute”方法)。我的问题是现在我需要为这些关系创建动态类型,所以我需要使用 APOC 库(具体来说,'CALL apoc.merge.relationship')。我知道这个库必须使用 Neo4j 桌面安装,然后您可以通过在其上键入 Cypher 查询来创建您的数据库。但是我需要使用“CALL apoc.merge.relationship”在我的 Java 代码中从头开始创建一个数据库。
谢谢 :)
解决方案
首先,您需要在项目中导入 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);
}
});
推荐阅读
- aws-lambda - 调用 API Gateway 端点的 lamda 函数
- javascript - Tippy popover 仅绑定到容器
- statistics - 基本统计:关于 z 分数和标准差的混淆
- java - 从 DbUnit 数据集中插入测试数据的 Unitils 错误
- flutter - Flutter 可注入抽象类
- r - 根据向量替换表格的单元格(空白单元格和没有字典的单元格除外)
- excel - 根据表格中的组合框值填充文本框 - Excel VBA
- python - 在 Colab python 中使用 Scratchai 库时出错
- ios - Ionic Cordova Promise.race([]).finally 不是函数
- string - 为什么子字符串不能与命令行参数一起使用?