Neo4j APOC核心模块详解与安装教程

一、Neo4j 服务器版安装 APOC 插件

1.命令行运行neo4j version,查看neo4j 版本
在这里插入图片描述
2.访问git仓库根据neo4j版本号下载jar包,核心库:https://github.com/neo4j/apoc/releases,扩展库https://github.com/neo4j-contrib/neo4j-apoc-procedures/tags
在这里插入图片描述
3.把下载好的jar包放到neo4j安装目录下的plugins目录下
在这里插入图片描述

4.修改neo4j的配置文件:neo4j安装目录>conf>neo4j.conf,cmd命令重新启动neo4j:neo4j restart
在这里插入图片描述
5.测试APOC是否安装成功,浏览器访问http://localhost:7474/,登录后运行:RETURN apoc.text.distance(“hello”, “word”),无报错则APOC安装成功
在这里插入图片描述

二、配置使用部分APOC函数

1.下图可以看到APOC有许多函数模块,某些模块可能用不到,可以修改conf文件配置白名单
在这里插入图片描述
2.修改neo4j的配置文件:neo4j安装目录>conf>neo4j.conf,cmd命令重新启动neo4j:neo4j restart
在这里插入图片描述
3.访问http://localhost:7474/,查看apoc会发现只加载coll相关的函数,说明白名单配置成功
在这里插入图片描述
4.apoc相关模块说明

  • apoc.agg: 提供聚合函数,用于在 Cypher 查询中进行数据聚合操作。
  • apoc.any: 提供对任意数据类型的操作。
  • apoc.bitwise: 提供位运算操作,如与、或、非等。
  • apoc.when:条件执行Cypher语句模块
  • apoc.case:条件分支模块,用于Cypher查询中的条件判断
  • apoc.coll 提供集合操作,如排序、去重、合并等。
  • apoc.convert: 提供数据转换功能,如 JSON 转换、字符串转换等。
  • apoc.create: 提供节点和关系的创建操作。
  • apoc.cypher: 允许在 Cypher 中执行动态 Cypher 语句。
  • apoc.data: 提供数据提取和转换功能,如从节点中提取属性。
  • apoc.date: 提供日期和时间操作,如格式化、解析等。
  • apoc.diff: 提供节点和关系的差异比较功能。
  • apoc.hashing: 提供哈希算法,如 MD5、SHA 等。
  • apoc.export:图数据导出模块
  • apoc.import:数据导入模块
  • apoc.load:数据加载模块,支持多种数据源
  • apoc.json: 提供 JSON 数据的解析和生成功能。
  • apoc.label: 提供节点标签的操作,如添加、删除标签。
  • apoc.map: 提供 Map 数据结构的操作,如合并、过滤等。
  • apoc.math: 提供数学运算功能,如随机数生成、统计计算等。
  • apoc.merge:高级节点和关系合并模块
  • apoc.meta: 提供元数据操作,如获取节点和关系的元数据。
  • apoc.node: 提供节点操作,如获取节点属性、删除节点等。
  • apoc.nodes: 提供多个节点的批量操作。
  • apoc.number: 提供数字操作,如格式化、解析等。
  • apoc.path: 提供路径操作,如查找最短路径、扩展路径等。
  • apoc.paths:路径相关工具模块
  • apoc.periodic:周期性执行Cypher模块
  • apoc.rel: 提供关系操作,如获取关系属性、删除关系等。
  • apoc.search:全文搜索模块
  • apoc.scoring: 提供评分和排名功能。
  • apoc.text: 提供文本操作,如正则表达式匹配、字符串分割等。
  • apoc.trigger:触发器模块
  • apoc.util: 提供实用工具。
  • apoc.version: 提供 APOC 库的版本信息。
  • apoc.xml: 提供 XML 数据的解析和生成功能。
  • apoc.do:条件执行Cypher语句模块
  • apoc.algo:图算法模块,包含Dijkstra、A*等算法
  • apoc.atomic:原子操作模块,用于并发事务
  • apoc.graph:图操作和分析模块
  • apoc.lock:事务锁定模块
  • apoc.log:日志记录模块
  • apoc.neighbors:邻居分析模块
  • apoc.refactor:图重构模块
  • apoc.schema: 提供图数据库模式操作,如创建索引、约束等。
  • apoc.spatial:地理空间模块
  • apoc.stats:图统计模块
  • apoc.temporal: 提供时间序列操作,如时间窗口计算等。
  • apoc.warmup:缓存预热模块

三、apoc.cypher、apoc.when、apoc.case、apoc.periodic

1.apoc.cypher.runFirstColumnMany(expression,params ):执行 Cypher 查询并返回第一列的所有值,结果以列表形式返回
2.apoc.cypher.runFirstColumnSingle(expression,params ):执行 Cypher 查询并返回第一列的第一个值。

RETURN apoc.cypher.runFirstColumnSingle('MATCH (p) RETURN p', {}) AS first_node,
apoc.cypher.runFirstColumnMany('MATCH (p) WHERE p.name = "Bob" RETURN p', {}) AS node_list

3.apoc.cypher.doIt(cypher, params):执行任意Cypher语句并返回结果
4.apoc.cypher.run(cypher, params):执行单个Cypher查询并返回结果
5.apoc.cypher.runSchema(cypher, params):执行模式相关的Cypher查询
6.apoc.cypher.runTimeboxed(cypher, params, timeout):在指定时间限制内执行Cypher查询
7.apoc.cypher.runWrite(cypher, params):执行写操作Cypher查询
8.apoc.cypher.runMany(cypherStatements, params):执行多个Cypher语句,支持写操作
9.apoc.cypher.runManyReadOnly(cypherStatements, params):执行多个Cypher语句,仅支持读操作

CALL apoc.cypher.doIt("MATCH (n) RETURN count(n) AS count", {}) YIELD value AS v1
CALL apoc.cypher.run("MATCH (n:Person) RETURN n.name AS name", {}) YIELD value AS v2
CALL apoc.cypher.runSchema("CREATE INDEX ON :Person(name)", {}) YIELD value AS v3
CALL apoc.cypher.runTimeboxed("MATCH (n) RETURN n", {}, 5000) YIELD value AS v4
CALL apoc.cypher.runWrite("CREATE (n:Person {name: $name})", {name: 'Alice'}) YIELD value AS v5
RETURN v1,v2,v3,v4,v5

10.apoc.when(condition, ifQuery, elseQuery, params):条件判断函数,如果condition为true,则执行ifQuery,否则执行elseQuery

CALL apoc.when(
  true,
  'MATCH (n) RETURN n',
  'RETURN "No nodes found"',
  {}
) YIELD value
RETURN value

11.apoc.case(conditionals, elseQuery, params):多条件判断函数。conditionals是一个包含多个[condition, query]对的列表

CALL apoc.case(
  [
    true, 'RETURN "First condition"',
    false, 'RETURN "Second condition"'
  ],
  'RETURN "Else condition"',
  {}
) YIELD value

12.apoc.periodic.cancel(name):取消一个正在运行的周期性任务。
13.apoc.periodic.commit(statement, params):执行一个语句,直到它返回 0 行。
14.apoc.periodic.countdown(name, statement, delay):创建一个倒计时任务,在指定延迟后执行语句。
15.apoc.periodic.iterate(cypherIterate, cypherAction, config):分批处理数据,第一个语句获取数据,第二个语句处理数据。

/**** config配置
 * batchSize:每次事务中执行的操作语句数量,默认值为 10000
 * parallel:是否并行执行操作语句,默认值为 false。注意:如果设置为 false,APOC 会使用单线程的线程池来防止并行执行;如果设置为 true,APOC 会使用可配置的线程池,线程池大小由 apoc.jobs.pool.num_threads 配置或默认设置为处理器核心数的两倍。并行执行会影响所有数据库的性能。
 * retries:如果操作语句执行失败,休眠 100 毫秒后重试,直到达到重试次数,默认值为 0。
 * batchMode:数据驱动语句的处理方式,默认值为 "BATCH"。可选值包括:
 *   - "BATCH":每批数据执行一次操作语句,操作语句会自动解包批次数据。
 *   - "SINGLE":逐条执行操作语句。
 *   - "BATCH_SINGLE":每批数据执行一次操作语句,但需要手动解包批次数据。
 * params:外部传入的参数映射,默认值为空对象 {}。
 * concurrency:当 parallel 为 true 时,生成的任务并发数,默认值为 50。
 * failedParams:如果设置为非负值,每个失败的批次会返回最多 failedParams 个参数集,默认值为 -1。
 * planner:查询计划器的类型,默认值为 DEFAULT。可选值包括:
 *   - "DEFAULT":默认查询计划器
 *   - "COST":基于成本的查询计划器
 *   - "IDP":迭代动态规划查询计划器
 *   - "DP":动态规划查询计划器
 *   - 注意:如果设置为非 DEFAULT 值,会在第二个语句前插入 planner=[VALUE_OF_CONFIG],且优先级高于查询中定义的查询计划器(如果有)。
 ****/

16.apoc.periodic.list():列出所有正在运行的周期性任务。
17.apoc.periodic.repeat(name, statement, rate, config):创建一个重复执行的任务。
18.apoc.periodic.submit(name, statement, params):提交一个一次性任务。
19.apoc.periodic.submitSchema(name, statement, params):提交一个一次性任务,专门用于 schema 操作。
20.apoc.periodic.truncate(config):分批删除所有节点和关系。

/****取消名为 'myTask' 的周期性任务****/
CALL apoc.periodic.cancel('myTask');
/****分批删除所有 Node 节点,每次删除 1000 个,直到没有节点可删除。****/
CALL apoc.periodic.commit('MATCH (n:Node) WITH n LIMIT 1000 DELETE n RETURN count(*)', {});
/****60 秒后删除所有Temp 节点。****/
CALL apoc.periodic.countdown('cleanup', 'MATCH (n:Temp) DELETE n', 60);
/****分批将所有 User 节点的 active 属性设置为 true,每批处理 1000 个节点。****/
CALL apoc.periodic.iterate('MATCH (n:User) RETURN n', 'SET n.active = true', {batchSize: 1000});
/****每小时执行一次,删除超过 24 小时的 Log 节点。****/
CALL apoc.periodic.repeat('cleanup', 'MATCH (n:Log) WHERE n.timestamp < datetime().epochSeconds - 86400 DELETE n', 3600);
/****提交一个任务,立即执行数据库备份。****/
CALL apoc.periodic.submit('backup', 'CALL apoc.export.cypher.all("backup.cypher", {})');
/****提交一个任务,立即创建 User 节点的 name 属性索引。****/
CALL apoc.periodic.submitSchema('index', 'CREATE INDEX ON :User(name)')
/****分批删除数据库中的所有节点和关系,每批处理 1000 个。****/
CALL apoc.periodic.truncate({batchSize: 1000})

四、apoc.create、apoc.merge

1.apoc.create.uuidBase64():生成一个 Base64 编码的 UUID。
2.apoc.create.uuidBase64ToHex(base64UUID):将 Base64 编码的 UUID 转换为十六进制格式。
3.apoc.create.uuidHexToBase64(hexUUID):将十六进制格式的 UUID 转换为 Base64 编码。

WITH apoc.create.uuidBase64() AS uuid,
apoc.create.uuidBase64ToHex(apoc.create.uuidBase64()) AS hex
RETURN uuid,hex,apoc.create.uuidHexToBase64(hex)

4.apoc.create.vNode创建一个虚拟节点,不会持久化到数据库中。
5.apoc.create.vRelationship创建一个虚拟关系,不会持久化到数据库中。

WITH apoc.create.vNode(['Person'], {name: 'Alice'}) AS a,
     apoc.create.vNode(['Person'], {name: 'Bob'}) AS b
RETURN apoc.create.vRelationship(a, 'KNOWS', {since: 2020}, b) AS rel

6.apoc.create.addLabels(node, [‘Label1’, ‘Label2’]):为指定节点添加一个或多个标签
7.apoc.create.clonePathsToVirtual(path):将路径克隆为虚拟路径,保留所有节点和关系
8.apoc.create.clonePathToVirtual(path):将单个路径克隆为虚拟路径
9.apoc.create.node([‘Label’], {key: ‘value’}):创建一个带有标签和属性的新节点
10.apoc.create.nodes([‘Label’], [{key: ‘value’}, {key: ‘value’}]):批量创建多个带有标签和属性的节点
11.apoc.create.relationship(startNode, ‘REL_TYPE’, {key: ‘value’}, endNode):在两个节点之间创建关系
12.apoc.create.removeLabels(node, [‘Label1’, ‘Label2’]):从指定节点移除一个或多个标签
13.apoc.create.removeProperties(node, [‘prop1’, ‘prop2’]):从指定节点移除一个或多个属性
14.apoc.create.removeRelProperties(rel, [‘prop1’, ‘prop2’]):从指定关系移除一个或多个属性
15.apoc.create.setLabels(node, [‘Label1’, ‘Label2’]):设置节点的标签(替换现有标签)
16.apoc.create.setProperties(node, {key1: ‘value1’, key2: ‘value2’}):设置节点的多个属性
17.apoc.create.setProperty(node, ‘key’, ‘value’):设置节点的单个属性
18.apoc.create.setRelProperties(rel, {key1: ‘value1’, key2: ‘value2’}):设置关系的多个属性
19.apoc.create.setRelProperty(rel, ‘key’, ‘value’):设置关系的单个属性

/*****上面的节点、关系、属性操作函数,需要通过CALL YIELD语法执行函数*****/
CALL apoc.create.node(['Person'], {name: '张三'}) YIELD node
CALL apoc.create.addLabels(node, ['Label1', 'Label2']) YIELD node AS node1
RETURN node1;

20.apoc.merge.node(labels, identProps, onCreateProps, onMatchProps):合并节点。如果节点不存在,则创建节点并设置onCreateProps属性;如果节点存在,则更新onMatchProps属性。labels是节点标签,identProps是用于查找节点的唯一标识属性。
21.apoc.merge.nodeWithStats(labels, identProps, onCreateProps, onMatchProps):与apoc.merge.node功能相同,但返回统计信息,包括创建或匹配的节点数量。
22.apoc.merge.relationship(startNode, relType, identProps, onCreateProps, endNode, onMatchProps):合并关系。如果关系不存在,则创

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

局外人LZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值