1.APOC简介与安装
备注:本文APOC是基于Neo4j3.5版本进行安装,原因在于本地电脑的Java版本为1.8
1.1 APOC简介
APOC的名字最早来自于2009年,英文为 “A Package Of Components”,表示Neo4j的组件库,后来变为“Awesome Procedures On Cypher”,超级棒的Cypher过程。在《黑客帝国》电影中,APOC是Neo的队友,也是飞船的驾驶员,最后被叛徒Cypher杀害。
在APOC发布之前,开发人员需要为Cypher或Neo4j数据库尚未实现的常用功能编写过程和函数。每个开发人员都可能编写所需的函数,这会导致大量的重复。针对这种需求,Neo4j官方开发了一个过程和函数的标准库,即APOC库,在Neo4j3.3版本时,APOC成为了Neo4j的标准库。APOC库是用Java实现的,由450+个过程和函数组成(还在不断更新中),用于完成数据集成、图形算法或数据转换等领域的不同任务。与电影《黑客帝国》中情节不同的是,在Neo4j中,APOC提供的过程极大的增强了Cypher的表达能力。
1.2安装APOC
APOC依赖于Neo4j的内部api,在Neo4j时,需要使用匹配的APOC版本,确保Neo4j和APOC之间的前两个版本号匹配。具体对应关系见表1-1:
表1-1 Neo4j与APOC版本对应
1)下载APOC。
在Neo4j的APOC手册中有APOC的下载地址,通过链接下载指定的APOC版本,本书选用apoc-3.5.0.11-all.jar。
2)安装APOC。
下载APOC的jar文件后,将jar文件复制到Neo4j的plugins目录下。在Windows系统下,plugins路径为D:\neo4j-community-3.5.5\plugins,在Ubuntu系统下,plugins路径为于/var/lib/neo4j/plugins。
3)修改配置文件。
在neo4j.conf 配置文件中添加:
dbms.security.procedures.unrestricted=apoc.*
该行配置语句可以完成APOC的函数和过程授权,不配置改行语句,在执行函数和过程时,可能会出现如下错误:apoc.algo.pagerank is not available due to having restricted sccess rights,check configuration。
4)重启Neo4j服务。
5)在可视化界面运行。
return apoc.version()
如果出现对应的版本号,证明安装成功。
返回值为:
│"apoc.version()" │
│"3.5.0.11" │
1.3 APOC使用
APOC提供了数据集成,数据导出,数据结构,高级图查询等诸多功能,本小节选取部分过程和函数进行演示。相比于过程,函数更容易理解,函数可以直接应用在Cypher查询中,对传入函数中的数据进行计算并返回计算后的结果,这点与Cypher内置的函数没有明显区别。过程的调用必须使用CALL命令,APOC中的过程可以类比与关系数据库中的存储过程。
1. APOC提供的过程和函数概述
APOC提供的过程与函数数量较多,在使用过程中若有需要基于APOC实现的,可以在官网手册中获得更详细的使用说明,读者在查看过程中,可以将APOC3.5版本的官网手册和APOC 4.1版本的官网手册对比阅读。APOC 4.1版的包结构如表1-2所示。
Procedures & Functions
apoc
apoc.agg
apoc.algo
apoc.any
apoc.atomic
apoc.bitwise
apoc.bolt
apoc.cluster
apoc.coll
apoc.config
apoc.convert
apoc.couchbase
apoc.create
apoc.custom
apoc.cypher
apoc.data
apoc.date
apoc.diff
apoc.do
apoc.es
apoc.example
apoc.export
apoc.generate
apoc.gephi
apoc.get
apoc.graph
apoc.hashing
apoc.import
apoc.json
apoc.label
apoc.load
apoc.lock
apoc.log
apoc.map
apoc.math
apoc.merge
apoc.meta
apoc.metrics
apoc.model
apoc.mongo
apoc.mongodb
apoc.monitor
apoc.neighbors
apoc.nlp
apoc.node
apoc.nodes
apoc.number
apoc.path
apoc.periodic
apoc.redis
apoc.refactor
apoc.rel
apoc.schema
apoc.scoring
apoc.search
apoc.spatial
apoc.static
apoc.stats
apoc.systemdb
apoc.temporal
apoc.text
apoc.trigger
apoc.ttl
apoc.util
apoc.uuid
apoc.warmup
apoc.xml
2.APOC提供的常见功能如下:
1)数据集成。
APOC库支持将各种数据格式(包括JSON、XML和XLS)导入到Neo4j数据库中,也可以从关系型数据库、Mongodb、ElasticSearch将数据导入Neo4j数据库中。这些过程大多位于apoc.load下,也有部分位于apoc.import、apoc.mongodb、apoc.es下。
2)数据导出。
Neo4j可以通过备份和转储命令导出整个数据库。但不支持导出子图或将数据导出为标准数据格式。APOC扩展了Neo4j的导出功能,Neo4j支持将数据导出为JSON、CSV、GraphML和Cypher脚本等格式。
APOC支持导出的过程大多位于apoc.export下。在将数据导出到文件系统时,可能存在权限问题,这时可以通过在
neo4j.conf中设置以下属性来启用:
apoc.export.file.enabled=true
如果没有设置这个属性,在执行导出时,将得到以下错误消息:
Failed to invoke procedure apoc.export.csv.all: Caused by: java.lang.RuntimeException: Export to files not enabled, please set apoc.export.file.enabled=true in your neo4j.conf
3)数据结构。
APOC库提供了用于操作数据结构的函数和过程,对数据结构的操作主要分为三种,分别是转换功能(ConversionFunctions),映射功能(Map Functions),集合功能(Collection Functions)。转换功能用于将值的类型强制转换,转换功能主要位于apoc.convert包下。映射功能用于对map类型进行操作,映射功能位于apoc.map包下。集合功能用于对集合和列表进行操中,主要位于apoc.coll包下。
4)时间格式操作。
APOC库提供了了对时间类型、时间戳和日期字符串值格式化的支持,这些函数主要位于apoc.temporal和apoc.date包下。
5)数学运算。
APOC提供了关于数学运算的函数和过程,具体包括数学运算功能(包括四舍五入、最大最小值等),精确计算功能,数数字格式转换功能,位运算功能。其中数学运算函数主要位于apoc.math包下,精确计算函数位于apoc.number.exact包下,数字格式转换函数位于apoc.number包下,位运算操作位于apoc.bitwise包下。
6)高级图查询。
APOC库提供的高级图查询包含:扩展路径、扩展子图、邻居功能、路径操作、关系查询、节点查询、并行节点搜索等。相关的函数或过程主要位于:apoc.path、apoc.neighbors、apoc.rel、apoc.nodes、apoc.search等包中。
7)触发器。
APOC提供了类似关系数据库中的触发器功能,触发器功能可以在创建、更新或删除Neo4j中的数据时触发。相关的函数或过程主要位于apoc.trigger中,需要注意的是,如果启用apoc.trigger
需要在$NEO4J_HOME/config/neo4j.conf中启用
apoc.trigger.enabled=true • 1
8)文本和查找索引。
从3.5版开始,Neo4j提供了内置的、不区分大小写的、可配置的全文索引。原有的手工检索和全文检索(位于apoc.index)将逐渐被废弃。在表13-2中已经废弃apoc.index。全文索引的相关函数或过程位于apoc.schema包下。
9)图算法。
在算法方面,APOC库中提供了路径查找算法,相似性算法、社区检测算法、中心性算法等。在图算法方面,Neo4j有提供专用的图算法库Graph Algorithms Library,目前APOC库中除了路径查找算法外,其余算法将被弃用,即将被删除。如果要使用相关图算法,可使用图形算法库中的算法。路径查找算法主要位于apoc.algo包下。