Neo4j图数据库扩展指南:APOC和ALGO

Neo4j图数据库扩展指南:APOC和ALGO"

作者:俞方桦
ISBN:9787302555483
定价:¥79
字数:千字
页数:
出版时间:2020.07.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

本书共13章,全面、系统和详尽地介绍Neo4j图数据库扩展的概念、APOC和ALGO扩展包的使用、以及开发服务器扩展的方法。内容分为四个部分,依次为:Neo4j 图数据库扩展介绍;APOC 扩展包函数和过程指南;ALGO 扩展包函数和过程指南;开发和测试方法。

前言

前  言

本书的内容

Neo4j是当今全球领先的图数据库软件,起源于开源的图数据库项目,经过十余年的发展,已经在很多企业、研究机构中有着广泛和成功的应用。随着数据库规模的增加,以及对图算法类型、查询性能和数据库管理功能等要求越来越高,Neo4j推出了扩展包APOC和ALGO以满足这些要求。

APOC 和ALGO 都是Neo4j开发和共享的数据库扩展,它们包含了很多实用的算法过程和函数。APOC提供了丰富的与查询执行、数据集成、数据库管理等相关的过程和函数,而ALGO则包含常用的图算法过程。APOC是Awesome Procedures Of Cypher的简称,同时也是电影《黑客帝国》中的一个角色;ALGO的名字就很容易明白了,它就是英文ALGOrithms(算法)的开始部分。

APOC和ALGO的内容丰富、功能强大,作为Neo4j数据库功能的扩充,是实现高性能查询、数据库集成、复杂算法等复杂应用所必须的。然而,国内的技术人员苦于一直没有关于APOC和ALGO介绍的中文资料,无法真正发挥它们的价值。另一方面,英文在线文档中使用的数据样例也不是中国用户所熟悉和了解的。这对于深刻理解像图算法这样的复杂概念来说又增加了不少难度。

出于上面的原因,我们在策划《图数据库技术丛书》系列的第三本时,选择了介绍APOC和ALGO扩展包。

本书基于Neo4j数据库3.5版本及其对应的ALGO和APOC扩展包,详细介绍了近二百个主要过程和函数的定义、相关理论、使用方法、代码样例,让广大Neo4j图数据库的设计和开发人员能够快速掌握正确和高效的图数据库分析方法及其应用开发技能。 

本书分成四个部分:

(1)概述(第1~2章),介绍Neo4j数据库扩展的起源和安装配置方法;

(2)APOC扩展包使用指南(第3~9章),介绍APOC中7类主要过程和方法的使用;

(3)ALGO扩展包使用指南(第10~13章),介绍ALGO中4类图算法相关过程和方法的使用;

(4)Neo4j数据库扩展开发指南(第14~15章),介绍使用Java开发数据库扩展过程和函数的方法。

全书共分15章,各章节介绍如下:

第1章  Neo4j图数据库扩展概述。回顾Neo4j图数据库扩展的起源和来历,并概述两个主要扩展包APOC和ALGO的内容。对于2020年4月最新发布的Graph Data Science扩展包,及其对ALGO扩展包中相关图算法过程所做的接口改变也进行了介绍。

第2章  扩展包的安装和配置。介绍扩展包在不同Neo4j版本中的安装、配置和测试方法。

第3章  路径扩展过程。介绍APOC中与路径扩展相关的过程,通过实例说明如何对图中节点和关系进行更加高效的遍历,也介绍了APOC中对子图操作的过程。

第4章  查询任务管理。介绍查询的更新方法,特别是如何通过控制批次大小减少事务对内存的要求、如何通过指定并发性提高查询执行性能。本章还介绍了动态Cypher查询执行方法和条件分支执行。

第5章  数据导入和导出。介绍从各种数据源,包括XML、JSON、JDBC以及外部Neo4j数据库导入数据到Neo4j的方法,以及从Neo4j导出图或图的一部分到各种格式/目的数据存储的方法。

第6章  图重构。图重构是对图数据库中节点、关系和属性定义的变更和转换操作。APOC提供的重构过程支持节点的合并、到关系的转换,关系的合并、重定向、反转、到节点的转换,根据属性值创建节点等操作。

第7章  数据库运维。主要介绍APOC中关于数据库触发器、索引管理、元数据和监控相关指标的过程和函数。

第8章  工具函数和过程。介绍APOC中路径对象相关操作、地图相关过程、集合操作;本章还介绍了几种主要的图生成过程。

第9章  虚拟图。虚拟图是仅存在于内存的图。虚拟图的创建和查询操作包括虚拟节点和关系的创建和查询。在内存中的图对象是许多图算法的输入。

第10章  路径搜索。最短路径是图算法和分析中最基本的一类方法。ALGO扩展包提供若干常用最短路径搜索方法,以及最小生成树和随机游走的算法过程。

第11章  社团检测。介绍ALGO包中提供的几类相关算法过程:三角结构搜索、连通分量、标签传播、模块度方法。

第12章  中心性算法。介绍ALGO包中提供的几类中心性算法过程:维度中心性、紧密中心性、协调中心性、间接中心性、特征向量中心性和页面排行。

第13章  相似度算法。介绍ALGO包中支持的几种计算节点和/或关系相似度的函数和方法,包括Jaccard相似度、重叠相似度、余弦相似度以及几何相似度。对图学习相关概念和方法,例如特征工程、图嵌入也做了介绍。

第14章  数据库扩展开发。详细、完整地介绍如何使用Java开发客户化的Neo4j数据库扩展过程和函数。

第15章  自定义的图遍历。在第14章的基础之上,进一步深入介绍如何基于Neo4j的“遍历框架”实现高效的图遍历过程。

如何使用本书

本书提供APOC和ALGO扩展包中多数过程和方法的使用参考,每个过程或方法均包括:

? 概述:说明过程和函数的用途、相关理论和方法;

? 调用接口:查询、参数说明和返回值;

? 示例:基于样例数据的Cypher。

本书章节按照过程所属的扩展包(APOC或ALGO)、然后是功能类别进行组织。如果你知道要进行什么样的操作、实现什么样的功能,可以通过目录找到对应的章节。

如果你要查找特定的过程或函数,可以从“目录”后的“ALGO过程和函数索引”、“APOC过程和函数索引”按照字母顺序找到它们所在的章节。

格式及说明

为方便区别不同的内容,本书中使用的特定排版格式。举例说明如下(按照在书中出现的先后顺序排列)。

(1)Linux命令行:

U

N

I

X mkdir plugins

pushd plugins

wget https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/3.5/apoc-3.5-all.jar

popd

docker run --rm -e NEO4J_AUTH=none -p 7474:7474 -v $PWD/plugins:/plugins -p 7687:7687 neo4j:3.5

(2)Cypher查询(包含注释行):

C

Y

P

H

E

R // 2.2 (1) 测试ALGO扩展包安装

CALL algo.list

// 2.2 (2) 测试APOC扩展包安装

RETURN apoc.version()

(3)过程定义:

下面的图例表示过程apoc.path.expandConfig:

? 支持有向图;

? 无关于权重图,即图中关系上是否带权重属性对过程没有影响;

? 返回结果到客户端;

? 不更新数据库;

? 低复杂度,通常是O(N)、O(LogN)或O(N*LogN);

? 不支持并行执行(单进程)。

过程 apoc.path.expandConfig

(4)过程接口:

过程接口 CALL apoc.path.subgraphNodes(

   startNode <id>Node/list,config

) YIELD node

(5)Neo4j数据库配置选项(在neo4j.conf文件中指定):

neo4j.conf apoc.jobs.pool.num_threads=10

(6)CSV文件内容:

C

S

V name,genre,zi,weapon,title

刘备,男,玄德,双锏,昭烈皇帝

关羽,男,云长,青龙偃月刀;长剑,汉寿亭候

(7)JSON文件内容:

J

S

O

N {

    "store": {

        "book": [

            {

                "category": "reference"

            }

        ],

        "bicycle": {

            "color": "red", "price": 19.95

        }

    },

    "expensive": 10

}

(8)XML文档内容:

XML <?xml version="1.0"?>

<目录>

   <图书 id="bk101">

      <作者>罗贯中</作者>

      <书名>三国演义</书名>

      <出版日期>2000-10-01</出版日期>

      <简介>中国古代四大名著之一。三国指的是魏、蜀汉、吴。</简介>

   </图书>

</目录>

(9)Java代码:

J

A

V

A package com.mypackage;

 import org.neo4j.graphdb.GraphDatabaseService;

  

  public class Procedures {

  

    @Context

    public GraphDatabaseService db;

  

    @Context

    public Log log;

 

}

(10)重要技巧,建议使用:

 

重要技巧 仅在对路径进行扩展时定义序列才是重要的。因此,如果只需要搜索能够到达的节点,或者路径的序列由其他规则选择,那应当避免使用序列sequence参数。例如,我们建议在apoc.path.subgraphNodes()、apoc.path.subgraphAll()和apoc.path.spanningTree()过程中不要使用序列,因为这些过程中实现的高效匹配唯一节点算法会干扰序列化路径寻址的执行。

(11)警告信息,避免使用:

 

避免使用 除非明确知道需求、数据特征、而且已经测试过相关逻辑,否则不要使用NONE作为唯一性规则,因为这样会在遍历有环的图时形成无限循环,从而影响数据库运行。

(12)重要提示,谨慎使用:

 

小心使用 仅当数据库是存储在SSD(固态硬盘)时才使用parallel:true选项,因为SSD具有更好的随机读写速率。如果是物理硬盘,则不要使用并行选项,因为这反而会降低整体执行效率。

源码下载与技术支持

本书中所有样例数据、Cypher代码和Java项目和代码均可以在这里免费访问: 

https://github.com/Joshua-Yu/neo4j-extensions-book 

如有问题,欢迎在Neo4j中文社区中留言:http://neo4j.com.cn。

作者联系邮箱:张帜:zhizh@we-yun.com,俞方桦:yufanghua@yahoo.com。

致  谢

每一本书从构思到编写到出版都不是一蹴而就的,其中不仅仅有编者的辛勤努力,也与更多人的支持和付出密不可分。这里,我首先要感谢张帜老师,作为丛书的主编,是他激励我写这本书、积极与出版社联系,并在撰写过程中给予我很多指导。

我还要感谢Neo4j的同事们。在写作过程中无论什么时候我有问题,他们都及时耐心地回复我,他们似乎是7×24小时在线、永远不知疲倦。对于本书的内容,他们也提出了宝贵的建议和意见。

我要感谢来自华为和平安科技的用户们,他们提供的关于过程文档和代码的反馈意见,不仅对本书的内容有积极的参考价值,还使得存在的代码缺陷、文档疏漏得到及时修正。

特别感谢清华大学出版社的编辑老师们,有了他们的竭力支持和精雕细琢,本书才得以顺利问世。

在本书撰写的过程中,尤其感谢我的家人给予的支持和帮助;特别地,谨以此书纪念我的母亲。

期望这本书能够给中国大数据和图数据库领域的同行们提供有益的借鉴和参考,特别为图数据库的研究和应用发展尽绵薄之力。由于时间仓促,以及笔者能力所限,书中难免有错误及不足之处,敬请读者海涵,并提出宝贵意见。我们会在后续的版本中予以更正和补充。

俞方桦

2020年1月3日于悉尼

目录

目  录 

第一部分  概述

第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

作者简介

编辑推荐

本书基于Neo4j数据库3.5版本及其对应的ALGO和APOC扩展包,详细介绍了近二百个主要过程和函数的定义、相关理论、使用方法、代码样例,让广大Neo4j图数据库的设计和开发人员能够快速掌握正确和高效的图数据库分析方法及其应用开发技能。

作者寄语

张老师是微云数聚(北京)科技有限公司创始人、中国IT界元老、中国图数据库先导者、大数据领域资深专家、WPS曲线汉字全套核心技术的发明人。1985年研究生毕业于国防科技大学,获中国首届信息系统工程硕士。

电子资料

www.luweidong.cn

下一个