图书目录

目  录 

第一部分  概述

第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