Neo4j-APOC扩展与使用

Neo4j-APOC扩展与使用在 APOC 发布之前 开发人员需要为 Cypher 或 Neo4j 数据库尚未实现的常用功能编写过程和函数

大家好,欢迎来到IT知识分享网。

1.APOC简介与安装

备注:本文APOC是基于Neo4j3.5版本进行安装,原因在于本地电脑的Java版本为1.8

1.1 APOC简介

1.2安装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() 

1.3 APOC使用

APOC提供了数据集成,数据导出,数据结构,高级图查询等诸多功能,本小节选取部分过程和函数进行演示。相比于过程,函数更容易理解,函数可以直接应用在Cypher查询中,对传入函数中的数据进行计算并返回计算后的结果,这点与Cypher内置的函数没有明显区别。过程的调用必须使用CALL命令,APOC中的过程可以类比与关系数据库中的存储过程。

1. APOC提供的过程和函数概述

APOC提供的过程与函数数量较多,在使用过程中若有需要基于APOC实现的,可以在官网手册中获得更详细的使用说明,读者在查看过程中,可以将APOC3.5版本的官网手册和APOC 4.1版本的官网手册对比阅读。APOC 4.1版的包结构如表1-2所示。

2.APOC提供的常见功能如下:

1)数据集成。

APOC库支持将各种数据格式(包括JSON、XML和XLS)导入到Neo4j数据库中,也可以从关系型数据库、Mongodb、ElasticSearch将数据导入Neo4j数据库中。这些过程大多位于apoc.load下,也有部分位于apoc.import、apoc.mongodb、apoc.es下。

2)数据导出。
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库提供了用于操作数据结构的函数和过程,对数据结构的操作主要分为三种,分别是转换功能(Conversion Functions),映射功能(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 

8)文本和查找索引。

从3.5版开始,Neo4j提供了内置的、不区分大小写的、可配置的全文索引。原有的手工检索和全文检索(位于apoc.index)将逐渐被废弃。在表13-2中已经废弃apoc.index。全文索引的相关函数或过程位于apoc.schema包下。

9)图算法。

在算法方面,APOC库中提供了路径查找算法,相似性算法、社区检测算法、中心性算法等。在图算法方面,Neo4j有提供专用的图算法库Graph Algorithms Library,目前APOC库中除了路径查找算法外,其余算法将被弃用,即将被删除。如果要使用相关图算法,可使用图形算法库中的算法。路径查找算法主要位于apoc.algo包下。

2.APOC使用案例

2.1 APOC帮助命令。

查看apoc支持过程和函数:

call apoc.help('apoc') 

返回值为apoc支持的过程,函数等,由于返回值较长,此处列出一条返回结果,为便于分析返回结果,将返回结果进行人工分行。

"procedure" "apoc.algo.aStar" "apoc.algo.aStar(startNode, endNode, 'KNOWS|<WORKS_WITH|IS_MANAGER_OF>', 'distance','lat','lon') YIELD path, weight - run A* with relationship property name as cost function" "apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?)" null null 
CALL dbms.functions() YIELD name WHERE name STARTS WITH 'apoc.' RETURN COUNT(name) UNION CALL dbms.procedures() YIELD name WHERE name STARTS WITH 'apoc.' RETURN COUNT(name) 

返回值为:

表示目前3.5.0.11版本的APOC包含了246个函数和294个过程,这个数量已经超过了APOC开发之初定下目标(365个过程或函数)。

2.2APOC生成随机图。

本部分操作先删除图中的所有节点和关系,代码如下:

MATCH (n) DETACH DELETE n 

基于APOC生成随机图,代码如下:

CALL apoc.generate.ba(10,2,'Person','朋友') 

查看所有路径,代码如下:

MATCH p = (n)-[r]-(m) RETURN p 

2.3 实现PageRank算法。

本部分操作先删除图中的所有节点和关系,代码如下:

MATCH (n) DETACH DELETE n 
FOREACH (id In range(1,1000) | CREATE (n:NodeLabel{ 
   id:id})) 

再创建100万个关系:

MATCH (n1:NodeLabel),(n2:NodeLabel) WITH n1,n2 LIMIT  WHERE rand()<0.1 CREATE (n1)-[:REL_TYPE]->(n2) 

调用PageRank算法计算NodeLabel节点中的重要性排名,代码如下:

MATCH (n:NodeLabel) WITH collect(n) AS ns CALL apoc.algo.pageRank(ns) YIELD node,score RETURN node,score ORDER BY score DESC LIMIT 10 

2.4 APOC函数使用。

APOC的函数使用与Cypher的内置函数使用基本一致,下面基于APOC完成一个均值计算,代码如下:

RETURN apoc.coll.avg([1,2,3,4,5]) AS output 

apoc.coll.avg()为APOC提供的函数,在使用过程中,只需要将参数放如函数中,即可返回对应的返回值,返回值为:

基于APOC完成数据类型转换为字符串的操作,代码如下:

RETURN apoc.convert.toStringList([1, "2", 3, "Four"]) AS output 

返回值为:

返回值中,1也用双引号包裹起来,表明其数据类型的字符串。

3 APOC总结

以上讲述了APOC的安装与基本使用,相关操作,可以查询官网。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124754.html

(0)
上一篇 2025-10-03 19:45
下一篇 2025-10-03 20:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信