目 录
第一部分 概述
第1章 Neo4j图数据库扩展概述 3
1.1 Neo4j图数据库平台 3
1.1.1 图数据库是当今最热门的NoSQL数据库类别 3
1.1.2 Neo4j图数据库平台 4
1.1.3 原生图数据库 5
1.2 Neo4j数据库扩展 7
1.2.1 背景 7
1.2.2 APOC扩展库的内容 8
1.2.3 ALGO扩展库的内容 12
1.2.4 ALGO扩展库的未来版本 14
第2章 扩展包的安装和配置 18
2.1 扩展包的下载 18
2.2 扩展包的安装和配置 18
2.2.1 在Neo4j Desktop中自动安装 18
2.2.2 手动安装 19
2.2.3 在Docker容器中安装 19
2.2.4 测试安装 20
2.2.5 在线文档 20
第二部分 APOC扩展包使用指南
第3章 路径扩展过程 23
3.1 路径扩展过程概述 23
3.2 主要参数说明 25
3.2.1 标签过滤器(labelFilter) 25
3.2.2 关系过滤器(relationshipFilter) 25
3.2.3 标签和关系序列(Sequence) 26
3.2.4 唯一性规则(Uniqueness) 27
3.2.5 理解Cypher的模式匹配 28
3.3 基本路径扩展过程 32
3.3.1 定义 32
3.3.2 应用 32
3.3.3 过程概述 – apoc.path.expand 33
3.3.4 过程调用接口 – apoc.path.expand 33
3.3.5 示例 – 创建三国人物关系图 33
3.3.6 示例 – apoc.path.expand 34
3.4 可配置的路径扩展过程 35
3.4.1 定义 35
3.4.2 过程概述 – apoc.path.expandConfig 36
3.4.3 过程调用接口 – apoc.path.expandConfig 36
3.4.4 示例 – apoc.path.expandConfig 37
3.5 搜索子图 38
3.5.1 定义 38
3.5.2 应用 39
3.5.3 过程概述 – apoc.path.subgraphNodes 39
3.5.4 过程调用接口 – apoc.path.subgraphNodes 39
3.5.5 示例 – apoc.path.subgraphNodes 41
3.6 搜索最小生成树 42
第4章 查询任务管理 43
4.1 查询任务管理概述 43
4.2 按照条件循环执行 – commit 46
4.2.1 定义 46
4.2.2 应用 47
4.2.3 过程概述 – apoc.periodic.commit 47
4.2.4 过程调用接口 – apoc.periodic.commit 47
4.2.5 示例 – apoc.periodic.commit 47
4.3 按照集合内容循环执行 – iterate 48
4.3.1 定义 48
4.3.2 应用 49
4.3.3 过程概述 – apoc.periodic.iterate 49
4.3.4 过程调用接口 – apoc.periodic.iterate 49
4.3.5 示例 – apoc.periodic.iterate 50
4.4 异步执行Cypher查询 – submit 51
4.4.1 定义 51
4.4.2 应用 51
4.4.3 过程概述 51
4.4.4 示例 51
4.5 自定义Cypher函数和过程 52
4.5.1 定义 52
4.5.2 应用 52
4.5.3 过程调用接口 52
4.5.4 示例 54
4.6 Cypher执行过程 54
4.6.1 定义 54
4.6.2 应用 56
4.6.3 过程调用接口 – apoc.cypher.run 56
4.6.4 示例 – apoc.cypher.run 56
4.6.5 过程调用接口 – apoc.cypher.runTimeboxed 56
4.6.6 示例 – apoc.cypher.runTimeboxed 57
4.6.7 过程调用接口 – apoc.cypher.doIt 58
4.6.8 示例 – apoc.cypher.doIt 58
4.6.9 过程调用接口 – apoc.cypher.runFiles 59
4.6.10 过程调用接口 – apoc.cypher.runSchemaFiles 60
4.6.11 过程调用接口 – apoc.cypher.parallel 60
4.6.12 示例 – apoc.cypher.parallel 61
4.6.13 过程调用接口 – apoc.cypher.mapParallel 61
4.6.14 示例 – apoc.cypher.mapParallel 61
4.7 Cypher执行的条件分支 62
4.7.1 定义 62
4.7.2 应用 62
4.7.3 过程调用接口 – apoc.*.when 62
4.7.4 示例 – apoc.when 63
4.7.5 过程调用接口 – apoc.case 63
4.7.6 示例 – apoc.cypher.*case 64
第5章 数据导入和导出 65
5.1 数据导入和导出概述 65
5.2 导出到CSV文件 – export.csv.* 69
5.2.1 定义 69
5.2.2 应用 69
5.2.3 过程概述 70
5.2.4 过程调用接口 – export.csv.all 70
5.2.5 示例 – export.csv.all 70
5.2.6 过程调用接口 – export.csv.data 71
5.2.7 示例 – export.csv.data 71
5.2.8 过程调用接口 – export.csv.graph 72
5.2.9 示例 – export.csv.graph 72
5.2.10 过程调用接口 – export.csv.query 73
5.2.11 示例 – export.csv.query 73
5.3 导出到JSON文件 73
5.3.1 定义 73
5.3.2 应用 74
5.3.3 过程概述 74
5.3.4 过程调用接口 – export.json.all 74
5.3.5 示例 – export.json.all 74
5.3.6 过程调用接口 – export.json.data 74
5.3.7 示例 – export.json.data 75
5.3.8 过程调用接口 – export.csv.graph 75
5.3.9 示例 – export.json.graph 76
5.3.10 过程调用接口 – export.json.query 76
5.3.11 示例 – export.json.query 76
5.4 导出到Cypher查询文件 77
5.4.1 定义 77
5.4.2 应用 77
5.4.3 过程概述 77
5.4.4 过程调用接口 – export.cypher.all 77
5.4.5 示例 – export.cypher.all 78
5.4.6 过程调用接口 – export.cypher.data 79
5.4.7 示例 – export.cypher.data 79
5.4.8 过程调用接口 – export.cypher.graph 79
5.4.9 示例 – export.cypher.graph 80
5.4.10 过程调用接口 – export.cypher.query 80
5.4.11 示例 – export.cypher.query 81
5.4.12 过程调用接口 – export.cypher.schema 81
5.4.13 示例 – export.cypher.schema 82
5.5 导入CSV文件 82
5.5.1 定义 82
5.5.2 应用 82
5.5.3 过程概述 82
5.5.4 过程调用接口 – apoc.load.csv 83
5.5.5 示例 – apoc.load.csv 84
5.6 导入JSON数据 85
5.6.1 定义 85
5.6.2 应用 87
5.6.3 过程概述 87
5.6.4 过程调用接口 – apoc.load.json 87
5.6.5 示例 – apoc.load.json 88
5.7 导入XML 文件 90
5.7.1 定义 90
5.7.2 导入XML文档 – apoc.xml.import 90
5.7.3 示例 – apoc.xml.import 92
5.7.4 XML文档加载 – apoc.load.xml 94
5.7.5 示例 – apoc.load.xml 95
5.8 访问其他Neo4j数据库 96
5.8.1 概述 96
5.8.2 过程定义 – apoc.bolt.execute 97
5.8.3 过程调用接口 – apoc.bolt.execute 97
5.8.4 示例 – apoc.bolt.execute 98
5.8.5 过程定义 – apoc.bolt.load 99
5.9 从JDBC源导入数据 99
5.9.1 概述 99
5.9.2 过程定义 – apoc.load.driver 101
5.9.3 过程调用接口 – apoc.load.driver 101
5.9.4 过程定义 – apoc.load.jdbc 102
5.9.5 过程调用接口 – apoc.load.jdbc 102
5.9.6 示例 – apoc.load.jdbc 102
5.9.7 过程定义 – apoc.load.jdbcUpdate 103
5.9.8 过程调用接口 – apoc.load.jdbcUpdate 103
5.9.9 示例 – apoc.load.jdbcUpdate 104
5.9.10 过程定义 – apoc.model.jdbc 104
5.9.11 过程调用接口 – apoc.model.jdbc 104
5.9.12 示例 – apoc.model.jdbc 105
第6章 图重构 107
6.1 图重构概述 107
6.2 克隆节点 108
6.2.1 定义 108
6.2.2 过程概述 109
6.2.3 过程调用接口 – apoc.refactor.cloneNodes 109
6.2.4 示例 – apoc.refactor.cloneNodes 109
6.3 克隆节点及其关系 110
6.3.1 定义 110
6.3.2 过程概述 110
6.3.3 过程调用接口 – apoc.refactor.cloneNodesWithRelationships 110
6.4 克隆子图 110
6.4.1 定义 110
6.4.2 过程概述 111
6.4.3 过程调用接口 – apoc.refactor.cloneSubgraph 111
6.4.4 示例 – apoc.refactor.cloneSubgraph 111
6.5 合并节点 112
6.5.1 定义 112
6.5.2 过程概述 112
6.5.3 过程调用接口 – apoc.refactor.mergeNodes 112
6.5.4 示例 – apoc.refactor.mergeNodes 112
6.6 合并关系 113
6.6.1 定义 113
6.6.2 过程概述 113
6.6.3 过程调用接口 – apoc.refactor.mergeRelationships 114
6.6.4 示例 – apoc.refactor.mergeRelationships 114
6.7 重定向关系 115
6.7.1 定义 115
6.7.2 过程概述 115
6.7.3 过程调用接口 – apoc.refactor.from 115
6.7.4 示例 – apoc.refactor.from 116
6.8 反转关系 116
6.8.1 定义 116
6.8.2 过程概述 116
6.8.3 过程调用接口 – apoc.refactor.invert 117
6.8.4 示例 – apoc.refactor.invert 117
6.9 设置关系类型 117
6.9.1 定义 117
6.9.2 过程概述 118
6.9.3 过程调用接口 – apoc.refactor.setType 118
6.9.4 示例 – apoc.refactor.setType 118
6.10 将关系转换成节点 118
6.10.1 定义 118
6.10.2 过程概述 119
6.10.3 过程调用接口 – apoc.refactor.extractNode 119
6.10.4 示例 – apoc.refactor.extractNode 119
6.11 将节点转换为关系 120
6.11.1 定义 120
6.11.2 过程概述 120
6.11.3 过程调用接口 – apoc.refactor.collapseNode 120
6.11.4 示例 – apoc.refactor.cloneNodes 121
6.12 标准化为布尔值 121
6.12.1 定义 121
6.12.2 过程概述 121
6.12.3 过程调用接口 – apoc.refactor.normalizeAsBoolean 121
6.12.4 示例 – apoc.refactor.normalizeAsBoolean 122
6.13 分类 123
6.13.1 定义 123
6.13.2 过程概述 123
6.13.3 过程调用接口 – apoc.refactor.categorize 123
6.13.4 示例 – apoc.refactor.categorize 124
6.14 重命名 125
6.14.1 定义 125
6.14.2 过程概述 125
6.14.3 示例 – apoc.refactor.rename.nodeProperty 125
第7章 数据库运维 127
7.1 数据库运维概述 127
7.2 使用触发器 129
7.2.1 概述 129
7.2.2 过程概述 – apoc.trigger.add 130
7.2.3 过程调用接口 – apoc.trigger.add 131
7.2.4 示例 – apoc.trigger.add 131
7.3 管理索引 132
7.3.1 概述 132
7.4 查看元数据 133
7.4.1 概述 133
7.4.2 过程概述 – apoc.meta.* 134
7.4.3 过程调用接口 – apoc.meta.* 134
7.4.4 示例 – apoc.meta.* 135
7.5 数据库监控 136
7.5.1 概述 136
7.5.2 过程概述 – apoc.monitor.* 136
7.5.3 过程调用接口 – apoc.monitor.* 136
7.5.4 示例 – apoc.monitor.* 136
第8章 工具函数和过程 138
8.1 工具函数和过程概述 138
8.2 节点相关操作 143
8.2.1 概述 143
8.3 路径相关操作 145
8.3.1 概述 145
8.3.2 函数概述 – apoc.path.combine 146
8.3.3 函数调用接口 – apoc.path.combine 146
8.3.4 示例 – apoc.path.combine 146
8.3.5 函数概述 – apoc.path.create 147
8.3.6 函数调用接口 – apoc.path.create 147
8.3.7 示例 – apoc.path.create 147
8.3.8 函数概述 – apoc.path.elements 147
8.3.9 函数调用接口 – apoc.path.elements 147
8.3.10 示例 – apoc.path.elements 148
8.3.11 函数概述 – apoc.path.slice 148
8.3.12 函数调用接口 – apoc.path.slice 148
8.3.13 示例 – apoc.path.slice 148
8.4 并行节点搜索 149
8.4.1 概述 149
8.4.2 函数概述 – apoc.search.node 150
8.4.3 函数调用接口 – apoc.search.node 150
8.4.4 示例 – apoc.search.node 150
8.5 地图和空间计算相关功能 150
8.5.1 概述 150
8.5.2 过程概述 – apoc.spatial.geocode 152
8.5.3 过程调用接口 – apoc.spatial.geocode 152
8.5.4 示例 – apoc.spatial.geocode 152
8.5.5 过程概述 – apoc.spatial.reverseGeocode 153
8.5.6 过程调用接口 – apoc.spatial.reverseGeocode 153
8.5.7 示例 – apoc.spatial.reverseGeocode 153
8.6 集合相关操作 154
8.7 图生成 157
8.7.1 概述 157
8.7.2 过程概述 – apoc.generate.er 157
8.7.3 过程调用接口 – apoc.generate.er 158
8.7.4 示例 – apoc.generate.er 158
8.7.5 过程概述 – apoc.generate.ws 159
8.7.6 过程调用接口 – apoc.generate.ws 160
8.7.7 示例 – apoc.generate.ws 160
8.7.8 过程概述 – apoc.generate.ba 161
8.7.9 过程调用接口 – apoc.generate.ba 162
8.7.10 示例 – apoc.generate.ba 163
8.7.11 过程概述 – apoc.generate.complete 164
8.7.12 过程调用接口 – apoc.generate.complete 164
8.7.13 示例 – apoc.generate.complete 164
8.7.14 过程概述 – apoc.generate.simple 165
8.7.15 过程调用接口 – apoc.generate.simple 165
8.7.16 示例 – apoc.generate.simple 165
第9章 虚拟图 167
9.1 虚拟图概述 167
9.2 虚拟节点和关系 168
9.2.1 概述 168
9.2.2 过程概述 – apoc.create.vNode 170
9.2.3 过程调用接口 – apoc.create.vNode 171
9.2.4 示例 – apoc.create.vNode 171
9.2.5 过程概述 – apoc.create.vNodes 171
9.2.6 过程调用接口 – apoc.create.vNodes 171
9.2.7 示例 – apoc.create.vNodes 172
9.2.8 过程概述 – apoc.create.vRelationship 172
9.2.9 过程调用接口 – apoc.create.vRelationship 172
9.2.10 示例 – apoc.create.vRelationship 173
9.2.11 过程概述 – apoc.create.vPattern 174
9.2.12 过程调用接口 – apoc.create.vPattern 174
9.2.13 示例 – apoc.create.vPattern 174
9.2.14 过程概述 – apoc.create.vPatternFull 175
9.2.15 过程调用接口 – apoc.create.vPatternFull 175
9.2.16 过程概述 – apoc.nodes.collapse 176
9.2.17 过程调用接口 – apoc.nodes.collapse 176
9.2.18 示例 – apoc.nodes.collapse 177
9.3 虚拟图 178
9.3.1 概述 178
9.3.2 过程概述 – apoc.graph.fromData 179
9.3.3 过程调用接口 – apoc.graph.fromData 179
9.3.4 示例 – apoc.graph.fromData 179
9.3.5 过程概述 – apoc.graph.fromPath 179
9.3.6 过程调用接口 – apoc.graph.fromPath 180
9.3.7 示例 – apoc.graph.fromPath 180
9.3.8 过程概述 – apoc.graph.fromPaths 180
9.3.9 过程概述 – apoc.graph.fromCypher 180
9.3.10 过程调用接口 – apoc.graph.fromCypher 180
9.3.11 示例 – apoc.graph.fromCypher 181
9.3.12 过程概述 – apoc.graph.fromDocument 181
9.3.13 过程调用接口 – apoc.graph.fromDocument 181
9.3.14 示例 – apoc.graph.fromDocument 182
9.3.15 过程概述 – apoc.nodes.group 183
9.3.16 过程调用接口 – apoc.nodes.group 184
9.3.17 示例 – apoc.nodes.group 185
第三部分 ALGO扩展包使用指南
第10章 路径搜索 189
10.1 路径搜索概述 189
10.2 广度和深度优先搜索 192
10.3 最短路径 192
10.3.1 概述 192
10.3.2 过程概述 – apoc.shortestPath* 193
10.3.3 过程调用接口 – algo.shortestPath* 193
10.3.4 示例 – algo.shortestPath 194
10.4 A*最短路径 196
10.4.1 概述 196
10.4.2 过程概述 – apoc.shortestPath.astar* 196
10.4.3 过程调用接口 – algo.shortestPath* 196
10.4.4 示例 – algo.shortestPath.astar* 197
10.5 单源起点最短路径 198
10.5.1 概述 198
10.5.2 过程概述 – apoc.shortestPath.deltaStepping* 199
10.5.3 过程调用接口 – algo.shortestPath.deltaStepping* 199
10.5.4 示例 – algo.shortestPath.deltaStepping* 200
10.6 全图最短路径 201
10.6.1 概述 201
10.6.2 过程概述 – algo.allShortestPaths* 201
10.6.3 过程调用接口 – algo.allShortestPaths* 201
10.6.4 示例 – algo.allShortestPaths 202
10.7 K-条最短路径 203
10.7.1 概述 203
10.7.2 过程概述 – algo.kShortestPaths* 204
10.7.3 过程调用接口 – algo.kShortestPaths* 204
10.7.4 示例 – algo.kShortestPaths 206
10.8 最小生成树 206
10.8.1 概述 206
10.8.2 过程概述 – algo.spanningTree.* 207
10.8.3 过程调用接口 – algo.spanningTree.minimum 207
10.8.4 示例 – algo.spanningTree.minimum 208
10.9 随机游走 209
10.9.1 定义 209
10.9.2 应用 209
10.9.3 过程概述 209
10.9.4 简单过程调用接口 210
10.9.5 完整过程调用接口 210
10.9.6 示例 – algo.randomWalk 211
第11章 社团检测 212
11.1 社团检测概述 212
11.1.1 算法一览 212
11.1.2 图的聚集成群特征 214
11.1.3 过程使用说明 215
11.2 三角计数和集聚系数 216
11.2.1 概述 216
11.2.2 过程概述 – algo.triangle.stream 217
11.2.3 过程调用接口 – algo.triangle* 217
11.2.4 示例 – algo.triangle.stream 218
11.2.5 过程概述 – algo.triangleCount* 218
11.2.6 过程调用接口 – algo.triangle* 218
11.2.7 示例 – algo.triangleCount.stream 219
11.3 强连通分量 219
11.3.1 概述 219
11.3.2 过程概述 – algo.scc 220
11.3.3 过程调用接口 – algo.scc 221
11.4 连通分量 221
11.4.1 概述 221
11.4.2 过程概述 – algo.unionFind* 222
11.4.3 过程调用接口 – algo.unionFind* 223
11.4.4 示例 – algo.unionFind* 224
11.5 标签传播算法 224
11.5.1 概述 224
11.5.2 过程概述 – algo.labelPropagation* 226
11.5.3 过程调用接口 – algo.labelPropagation* 226
11.5.4 示例 – algo.unionFind* 227
11.6 Louvain模块度算法 228
11.6.1 概述 228
11.6.2 过程概述 – algo.louvain* 230
11.6.3 过程调用接口 – algo.louvain* 230
11.6.4 示例 – algo.louvain* 232
11.7 小结 233
第12章 中心性算法 234
12.1 中心性算法概述 234
12.2 度中心性 237
12.2.1 概述 237
12.2.2 过程概述 – algo.degree* 238
12.2.3 过程调用接口 – algo.degree* 238
12.2.4 示例 – algo.degree* 239
12.3 紧密中心性 240
12.3.1 概述 240
12.3.2 过程概述 – algo.closeness* 241
12.3.3 过程调用接口 – algo.closeness* 241
12.3.4 示例 – algo.closeness* 242
12.4 协调中心性 242
12.4.1 概述 242
12.4.2 过程概述 – algo.harmonic* 243
12.4.3 过程调用接口 – algo.harmonic* 243
12.4.4 示例 – algo.harmonic* 244
12.5 间接中心性 244
12.5.1 概述 244
12.5.2 过程概述 – algo.betweenness* 245
12.5.3 过程调用接口 – algo.betweenness* 246
12.5.4 示例 – algo.betweenness* 247
12.6 特征向量中心性 247
12.6.1 概述 247
12.6.2 过程概述 – algo.eigenvector* 248
12.6.3 过程调用接口 – algo.eigenvector* 248
12.6.4 示例 – algo.eigenvector* 249
12.7 页面排行 250
12.7.1 概述 250
12.7.2 过程概述 – algo.pageRank* 252
12.7.3 过程调用接口 – algo.pageRank* 252
12.7.4 示例 – algo.pageRank* 253
12.8 小结 254
第13章 相似度算法 255
13.1 相似度算法概述 255
13.1.1 相似度过程 255
13.1.2 什么是相似度 256
13.2 Jaccard相似度 257
13.2.1 概述 257
13.2.2 函数/过程概述 – algo.similarity.jaccard* 258
13.2.3 调用接口 – algo.similarity.jaccard 258
13.2.4 示例 – algo.similarity.jaccard* 260
13.3 重叠相似度 260
13.3.1 概述 260
13.3.2 函数/过程概述 – algo.similarity.overlap* 261
13.3.3 调用接口 – algo.similarity.overlap 261
13.4 余弦相似度 262
13.4.1 概述 262
13.4.2 函数/过程概述 – algo.similarity.cosine* 263
13.4.3 调用接口 – algo.similarity.cosine 263
13.4.4 示例 – algo.similarity.cosine* 264
13.5 欧几里德相似度 265
13.5.1 概述 265
13.5.2 函数/过程概述 – algo.similarity.euclideanDistance* 265
13.5.3 调用接口 – algo.similarity.euclideanDistance* 266
13.5.4 示例 – algo.similarity.euclideanDistance * 267
第四部分 Neo4j数据库扩展开发指南
第14章 数据库扩展开发 271
14.1 数据库扩展开发概述 271
14.2 关于安全性 272
14.2.1 沙箱 272
14.2.2 白名单 273
14.3 创建数据库扩展项目 273
14.3.1 创建新项目 273
14.3.2 指定项目信息 275
14.3.3 创建程序包和过程类 277
14.4 创建数据库扩展过程 279
14.4.1 第一个过程 – hello 279
14.4.2 编译和打包 – hello 281
14.4.3 部署和测试 – hello 283
14.4.4 小结 283
14.5 开发扩展函数 285
14.5.1 调用扩展函数 285
14.5.2 开发扩展函数 285
14.6 开发扩展汇总函数 286
14.6.1 调用汇总函数 286
14.6.2 编写用户定义的汇总函数 286
14.7 细粒度图数据访问控制 287
14.7.1 方法 288
14.7.2 定义用户和角色 288
14.7.3 实现扩展过程 288
第15章 自定义的图遍历 289
15.1 自定义的图遍历概述 289
15.2 Neo4j 遍历框架 289
15.2.1 主要概念 290
15.2.2 遍历框架Java API 290
15.3 生成测试图 292
15.4 k-度邻居统计 – Cypher的实现 292
15.5 k-度邻居统计 – 扩展过程的实现 293
15.5.1 创建过程 293