概述
APOC是
Neo4j 3.3
版本推出时正式推荐的一个Java存储过程包,里面包含丰富的函数和过程,作为对Cypher所不能提供的复杂图算法和数据操作功能的补充,APOC还具有使用灵活、高性能等优势。
neo4 3.0 开始引入用户定义的从存储过程(非常类型关系型数据库的存储过程):
- Java实现
- 可以在neo4j数据库启动时加载
- 可以方便的在cypher中调用
- 实现cypher很难实现的功能
APOC
- 包含300+强大函数和过程
- 最早表示"A package of components"
- 后来表示“Awesome procedures on cypher”
文本和查找索引
CALL apoc.index.*
- Neo4j使用Lucene库来进行文本处理
- 文本索引过程用来对属性的文本内容进行NLP处理和创建索引
- 支持快速对节点和关系属性值进行全文查询
- 手工索引方式,需要随数据更新而定期更新
- 如果加载中文分词库,也能实现中文文本的索引
功能函数
CALL apoc.text.* /date.* /number.*
- 字符串处理
- 时间戳
- 数字类型
- 日期
- 科学计数
图论算法
社区检测和社团划分(Community Detection)
CALL apoc.algo.community()
- 标签传播
- 可自定义迭代层数和权重
- 对网络实施分区(partition)
路径扩展和图的遍历
CALL apoc.path.*
- 广度优先和无重复的关系路径
- 可自定义遍历规则:起始节点、层级、包含关系及方向等等
- 按照节点类型进行过滤:排除(blacklist)、终止(ter)、结束(end)、包含(whitelist)
- 最大节点和关系数限制
- 子图遍历
- 生成树(spanning tree)遍历
中心性(Centrality algorithm)
CALL apoc.algo.closeness()/betweeness
- 紧密中心性(Closeness Centrality)
- 间接中心性(Betweenness Centrality)
- 计算节点在网络中的核心程度
- 发现社交网络中重要人物
- 发现诈骗团伙中的核心/老大
页面排序(Page rank)
CALL apoc.algo.pagerank)
- 用来计算节点在整个网络的重要性
- 可以指定参与计算的节点
- 目前计算是基于全网的所有指定节点
地理空间函数
CALL apoc.spatial.*
- 根据地址返回全球坐标
- 计算直线距离
- 按照距离远近排序节点
数据集成
CALL apoc.load.*
- 加载JSON数据,调用RESTful API
- 加载关系型数据库数据,通过JDBC
- 流式化数据到Gephi
- 集成Elastic Search
- 加载XML文档
Cypher查询
CALL apoc.cypher.^
- 可以在apoc中调用cypher
- 好处
- 可以动态构建查询语句
- 控制查询的执行时间
- 条件化查询分支:when,case
- 灵活查询执行任务:批次查询、并行查询
虚拟图
CALL apoc.create.*
- apoc 支持构建虚拟的节点和关系,从而构建虚拟的路径和子图
- 虚拟图类似关系型数据库的视图的概念,它可以被查询并放回数据,但是并不在物理存储z数据库中
- 虚拟图使得默写查询的更加灵活和高效
- 创建数据库中并不存在的节点和关系
- 缩小查询的相关子图的规模
- 控制遍历路径
- 虚拟节点的和关系ID都是负数
- 内存管理
重构和优化图
CALL apoc.refactor.*
- 对已有的图进行转换操作,实现重构(Refactoring)
- 复制节点及其属性,包括不包括关系
- 合并节点
- 重建关系到性的节点
- 改变关系类型
- 将关系转换成节点
- 将节点转换为关系
- 将属性转换成分类的节点和相关节点建立 的关系
并行节点查询
CALL apoc.search.*
- 在可能的情况下并行查询节点
- 结果可以是全部匹配的节点或者去除重复的节点
- 可以使用JSON格式定义要查询的节点的属性集
- 支持多种匹配类型,
>,<, = , <>, <= ,>=, =~
其他数据库特性
- 触发器(Trigger)
- 写入锁
- 显示数据库元数据(metedata)
- 数据轮廓(data profiling)
- 管理索引和限制
- 对节点和关系并发操作的支持:原子性
https://neo4j.com/blog/import-10m-stack-overflow-questions/
本文使用 文章同步助手 同步
网友评论