目录

  • Neo4j
  • Neo4j 权威指南
  • 知识点梳理

Neo4j

Neo4j 是目前图数据库领域最流行的数据库,在知识图谱等应用上,主要采用 Neo4j,因为其简单、性能好、强大。其推出的 Cypher 语言更是适合图谱管理。

Neo4j 权威指南

《Neo4j 权威指南》一书非常适合学习 Neo4j,本文正是将其部分知识点整理,分享。

知识点梳理

以下,每个知识点都以 P 开头,PXX 代表原书的第 XX 页。

P42 属性的定义:boolean, byte, short,int,long,float,double,char,string。属性可以是数组
P51 查询关系关系和路径
P54 查询数据库,查询任意数据,清空数据库
P65 模式:图由节点和关系组成,节点可能有标签和属性,关系可能有类型和属性,节点表达实体,关系连接一对节点,关系可以有方向,也可以没有方向
P66 节点语法,关系语法,模式语法:节点和关系的语法组合就是模式
P66 模式可以定义为变量: 变量中的特殊字符使用 `` P151
P67 数据更新:使用 MATCH WITH SET RETURN
P68 同一个 Cypher 语句中可以包含多个模式,Neo4j 将确保单个模式不会包含匹配到多次的同一个图关系,比如:查找一个用户的朋友的朋友不应该返回该用户自身。如果希望返回自身,则需要使用多个 match 语句,即包含多个模式。
P70 基本语法:类型,表达式。节点:属性,标签。关系:属性,类型。属性名、标签名和类型不能作为 Cypher 语句中的参数,参数是 Cypher 语句中一个传值的方式,定义参数的语句在 Neo4j 中可以缓存,提升效率。
P72 Case 表达式:return case,相当于 if-else 逻辑控制。
P73 Cypher 中定义变量。
P73 Cypher 中使用参数让执行计划缓存起来更容易。参数能用于 WHERE 语句中的字面值和表达式,START 语句中的索引值、索引查询以及节点和关系的 ID。参数不能用于:属性名、关系类型和标签。
P74 Cypher 查询条件中,针对字符串使用正则表达式
P75 创建带属性的节点
P75 一次性创建多个节点,每个节点有多个属性
P75 设定节点的属性
P77 运算符:数学运算符,比较运算符,波尔运算符,字符串运算符,属性运算符
P77 值的相等与比较:= 和 <>。
• 路径可以看做是一些节点和关系的列表,它等于所有包含相同序列节点和关系的所有列表。
• 对任何值测试是否 = 和 <> null 都将返回 null, 这包括 null = null 和 null <> null。唯一可靠的测试一个值是否为 null 是使用 IS NULL 或者 IS NOT NULL。
• 对于 Map,只有键值对相同,才相等。
• 不同类型之间不能相互比较,特别地,节点、关系和映射之间不能相互比较。
P78 值的排序与比较运算
P78 链式比较运算
P78 Cypher 中使用 // 开头作为注释行
P78 模式 Pattern 和模式匹配是 Cypher 非常核心的部分,使用模式可以描述期望看到的数据形状。
P79 模式中支持加入多个标签,比如:{a:User:Admin}
P79 指定节点和关系的属性
P79 在 Merge 语句中,属性将作为一个约束去匹配数据库中数据是否存在该属性,如果没有匹配到,Merge 将与 Create 语句行为一致,即属性将会设置到新创建的阶段或关系中。Create 语句支持使用参数指定属性,但 Merge 不支持,Merge 需要提前知道属性名称,否则通不过编译。
P80 描述关系,不同类型和路径长度:(a)–(b); (a)-[r]-(b); (a)-[r:TYPE1|TYPE2]->(b); (a)-[2]->(b)
P82 列表:list, range
P84 列表推导式:list 推导式
P85 模式推导式
P86 Map 投射
P88 空值与真值表 NULL,AND,OR,XOR; 空值与 IN
P92 函数 id(), type();其他函数 nodes() P145, labels() P130
P93 匹配多个关系的一个
P94 关系类型中的特殊字符使用单引号 ``
P95 查询关系深度,路径长度:-[:TYPE
minHops…maxHops]->。minHops 和 maxHops 都是可选的,默认值分别为 1 和无穷大。
P98 查询最短路径函数:shortestPath
P99 应使用程序自己生成 ID 作为属性。Neo4j 会重用已删除的节点和关系的内部 ID,这意味着依赖 Neo4j 内部的 id 存在风险。
P101 OPTINAL MATCH 搜索模式中描述的匹配项,对于找不到的项用 null 代替
P102 WHERE 语句使用可选的元素属性和关系类型
P105 属性是否存在的检查 exists()
P105 WHERE 中使用 START WITH、END WITH和 CONTAINS
P107 WHERE 中使用正则表达式,匹配语法继承于 JAVA 正则表达式:
MATCH (n)
WHERE n.name =~ ‘Tob.
RETURN n
P107 WHERE 中支持的运算符
• 数学运算符:+、-、
、/
• 比较运算符:=、<>、IS NULL、IS NOT NULL
• 布尔运算符:AND、OR、XOR 和 NOT
• 字符串运算符:+、正则表达式 =~
• 列表运算符:+、IN
P108 WHERE 中使用模式作为过滤条件:
MATCH (persons),(peter {name: ‘Peter’})
WHERE NOT (persons)(peter)
RETURN persons
P110 WHERE 中使用关系类型过滤
MATCH (n)-[r]->()
WHERE n.name = ‘Andres’ AND type® =~ ‘K.*’
RETURN r
P111 WHERE 中空值过滤。使用 IS NULL 和 IS NOT NULL。
P113 START:通过 Legacy Index 查找开始点。Cypher 中的每个查询描述了一个模式,一个模式可以有多个开始点。一个开始点是模式中的一个关系或者节点。使用 START。START 语句仅当用于访问 Legacy Index。
As of Neo4j 2.0, lucene indexing is not the favored method of indexing data in Neo4j, instead we recommend defining indexes in the database schema.However, support for legacy indexes(indices with lucene) remains, because certain features, such as full-text search, are not yet handled by the new indexes.
http://man.hubwiz.com/docset/Neo4j.docset/Contents/Resources/Documents/indexing.html

START n = node:nodes(name = ‘A’)
RETURN n
P114 Aggregation: 聚合 count() P116, DISTINCT P120
P117 统计:sum, avg, percentileDisc, percentileCont,stdev,stdevp
P120 Collect
MATCH (n:Person)
RETURN collect(n.property)
P121 导入数据: LOAD CSV
P125 CREATE 详细介绍
P128 CREATE 中使用参数设置节点和关系的属性
P146 CREATE UNIQUE 尽可能的匹配,然后创建未匹配到的:MERGE 不能很强的保证关系的唯一性,CREATE UNIQUE 则假设模式是唯一的,如果有多个匹配的子图,将会报错。
P129 MERGE 详细介绍:确保图数据库中存在某个特定的模式(Pattern)
P132 MERGE ON CREATE,支持设置多个属性
MERGE (k:Person {name: ‘k’})
ON CREATE SET k.created = timestamp()
RETURN k

P132 MERGE ON MATCH,支持设置多个属性
MERGE (k:Person {name: ‘k’})
ON MATCH SET k.found = TRUE
RETURN k

P133 MERGE 可用于匹配或者创建关系,合并关系,合并无方向关系
MATCH (a:Person {name:‘a’}), (b:Person {name:‘b’})
MERGE (a)-[r:CONN]->(b)
RETURN a,r,b

P136 MERGE 创建唯一性约束
CREATE CONSTRAINT ON (n:Person) ASSERT n.name IS UNIQUE

P137 MERGE 中使用参数:显示的指定参数中的属性
MERGE (person:Person {name: $params.name})
RETURN person.name

P138 SET 更新数据
P139 SET 删除属性
P139 SET 复制节点或关系的属性
P140 SET 设置属性:来自参数。使用一个参数设置所有属性 P141,此时已经存在的属性被替换。
P140 SET 使用 MAP 时,可以使用 += 形式,用于添加属性而不删除元素中已经存在的属性。
P141 SET 设置节点的标签
P142 DELETE 删除图元素,节点和关系。
MATCH (n:Person)
DELETE n

P143 DELETE 删除所有节点和关系
MATCH (n)
DETACH DELETE n

删除一个节点及相关联的所有节点:直接或间接
MATCH (chatbot:Chatbot {id: 'foobar'})-[*0..]-(others) DETACH DELETE chatbot, others

P143 DELETE 删除一个节点及其所有的关系
MATCH (n {name: ‘Andy’})
DETACH DELETE n

P143 REMOVE 删除图元素的属性或标签。
MATCH (n {name:‘Peter’})
REMOVE n:German:Japan
RETURN n

P145 FOREACH 更新列表中的数据,或者来自路径的组件,或者来自聚合的结果。列表(Lists)和路径(Paths)是 Cypher 中的关键概念,FOREACH 可以在路径或者聚合的列表的每个元素上执行更新。
MATCH p= (begin)-[*]->(END)
WHERE begin.name = ‘A’AND END.name = ‘D’
FOREACH (n IN nodes§ | SET n.marked = TRUE)

FOREACH 括号中的变量是与外部分开的,这意味着 FOREACH 中创建的变量不能用于该语句之外。在 FOREACH 括号内,可以执行任何的更新命令,包括 CREATE、CREATE UNIQUE、DELETE 和 FOREACH。如果希望对列表中的每个元素执行额外的 MATCH 命令,使用 UNWIND 命令(见 PXXX)。

P149 RETURN 详细介绍
P151 RETURN *:返回查询找到的所有节点、关系、路径
P151 RETURN 中定义和使用列别名:RETURN a.age AS age
P153 RETURN 中使用 DISTINCT 唯一性结果
P153 ORDER BY 指定排序:可以紧跟在 RETURN 或 WITH 字句。
MATCH (n)
RETURN n
ORDER BY n.name

P154 ORDER BY 根据多个属性对节点进行排序
P154 ORDER BY 节点降序排序:DESC
P155 LIMIT 限制输出的行数
P156 SKIP 跳过开始的一部分结果
P158 SKIP 使用表达式:toInt()
P158 WITH 将分段进行的查询连接在一起,查询结果以管道的形式传递给另外一个部分作为开始点。
• 使用 WITH 可以在将结果传递到后续查询之前对结果进行操作,操作可以是改变结果的形式或数量;
• 使用 WITH 可以在聚合值上过滤
• 使用 WITH 将读语句和更新语句分开,因为查询中的每一部分要么只是读取,要么是写入,两者之间的转换可以用 WITH
P160 UNWIND 将一个列表展开为一个行的序列。用 UNWIND 可以将任何列表转为单独的行。
• 更多 UNWIND 示例:P240
P161 UNWIND 和 DISTINCT 去重
WITH [1,1,2,2] AS coll
UNWIND coll AS x
WITH DISTINCT x
RETURN collect(x) as SET
P161 UNWIND 从列表参数创建节点
P161 UNION 将多个查询结果组合起来:使用 UNION 组合查询结果时,所有的查询到的列的名称和数量必须完全一致。使用 UNION ALL 会包含所有的查询结果,使用 UNION 组合时,会移除结果集中的重复行。
• 更多 UNION 示例:P240
P163 CALL 语句用于调用数据库中的过程。
• 使用字面值参数调用过程 P164
• 调用过程并过滤结果 P166
• 调用过程示例 P241

P167 Predicate 断言函数:断言函数是对给定的输入返回 true 或者 false 的布尔函数,它们主要用于查询的 WHERE 部分过滤子图。
• all
• any
• none
• single
• exists
P170 Scalar 标量函数:标量函数返回一个单值。
• size
• length
• type
• id
• coalesce
• head
• last
• timestamp
• startNode
• endNode
• properties
• toInt
• toFloat
P177 List 列表函数
• nodes
• relationships
• labels
• keys
• extract
• filter
• tail
• range
• reduce
P182 数学函数
• abs
• ceil
• floor
• round
• sign
• rand
• log
• log10
• exp
• e
• sqrt
• sin
• cos
• tan
• cot
• asin
• acos
• atan
• atan2
• pi
• degrees
• radians
• haversion
P193 字符串函数
• replace
• substring
• left
• right
• ltrim
• rtrim
• trim
• lower
• upper
• split
• reverse
• toString

P199 自定义函数:自定义函数的编写类似于过程(Procedure)的创建,但它采用@UserFunction 注解,并且返回一个单值。有效的输出类型句括 long、Long、double、Double、boolean、Boolean、String,Node Path或者 List,这里的T可以是任意支持的类型。
P200 索引,数据库的索引是为了使得检索效率高而引入的冗余信息,代价是额外的存储空间和写入速度慢了。
CREATE INDEX ON :Person(name) # 创建索引
DROP INDEX ON: Person(name) # 删除索引
P201 索引,通常不需要再查询中指出使用哪个索引,Cypher 会自我判断。
P203 约束,保证数据的唯一性。约束可应用于节点或者关系。
• 创建节点属性的唯一性约束:确保拥有特定标签的所有节点的属性的值是唯一的,这个规则不适合没有该属性的节点。
• 创建节点和关系的属性存在性约束(企业版功能)。
• 添加约束花费时间,将扫描整个图。
P204 节点:创建属性唯一性约束
• CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
创建约束以后,如果创建节点违背该条件,将会报错。

P204 节点:删除属性唯一性约束
• DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE

P205 节点:属性存在性约束
• CREATE CONSTRAINT ON (book:Book) ASSERT exists(book.isbn)

P207 关系:属性存在性约束
• CREATE CONSTRAINT ON ()-[like:LIKDED] ASSERT exists(like.day)

那么,在创建关系,移除关系属性时,将受到该约束的限制。

P209 统计:Neo4j 使用统计信息来保持数据库优化执行计划。有了这些信息,Cypher 可以更高效的执行查询,因为每个查询都先编译为执行计划(Execution Plan)。统计信息更新涉及一些 Neo4j 配置项。
• dbms.index_sampling.background_enabled
• dbms.index_sampling.update_percentage
• cypher.statistics_disvergence_threshold
P209 统计:执行手动采样 – db.resampleIndex(), db.resampleOutdateIndexes()
P210 Cypher 执行查询过程介绍
P211 Cypher 执行性能分析:Explain, Profile.
• 如果只想查看查询计划,而不想运行该语句,可以在查询语句中加入 EXPLAIN。此的,该语句将返回空结果,对数据库不会做出任何改变。
• 如果想运行查询语句并查看哪个运算符占了大部分的工作,可以使用 PROFILE。此时,该语句将被运行,并跟踪传递了多少行数据给每个运算符,以及每个运算符与存储层交互了多少以获取必要的数据。注意,加入 PROFILE的查询语句将占用更多的资源,所以除非真正在做性能分析,否则不要使用PROFILE。
P243 最短路径规划:shortestPath
P274 最短路径规划:在路径上检查额外的断言
P249 Neo4j Maven 依赖库、许可协议介绍
P251 Neo4j 嵌入式 Model Java 启动和关闭
P253 Neo4j 创建图实例,将操作写进事务中
P254 Neo4j 创建节点,创建节点和属性,并赋值,为节点添加标签
P256 Neo4j 创建关系
P257 Neo4j 删除数据
P262 Neo4j 使用 db.traversalDescription() 执行遍历。
P265 索引: 手动创建索引。目前主要建议使用 Cypher 创建索引,但是 Cypher 中还不能建立全文索引的索引,所以需要全文索引仍然要通过手动建立索引。
P270 索引:配置和全文索引。
P271 索引:Lucene 索引及其他特性。
P273 过程(Procedure): 调用过程。
P273 过程:内建的过程,listLabels, CALL db.labels,AlterUserPassword 等
P280 事务管理:ACID 介绍,交互周期,隔离级别,死锁处理。
P292 BOLT Drvier :多语言 SDK 的 BOLT 连接,配置。
P297 Session: 执行 Cypher 语句的会话周期。Session 是连接池内的资源,执行事务。
P299 Session:提交事务
P299 Session:查询语句中的参数
P300 Session: 书签 Bookmark, 可以在Session执行了某些操作后创建一个书签,书签是指向某些操作的指针。当为其他相关工作创建新会话时,可以使用已经创建的书签。书签确保之后的操作对依赖于先前的操作。无论数据是否已复制到集群的每个实例,书签都保证下一个操作会被应用于先前设置了标签的实例。
P301 返回结果:结果游标,保留结果,结果摘要(Profile)。
P308 数据类型,对参数和结果都是有效的:Boolean, Integer, Float, String, List, Map.
P308 数据类型,仅对结果有效:Node, Relationship,Path.
P310 异常:ClientException, TransientException, etc.
P312 Neo4j HTTP API
P326 Neo4j Spring Data 使用介绍
P331 Neo4j 部署、配置、端口、启动、连接、加密
P338 Neo4j 监控、日志、查询管理、因果集群
P350 Neo4j 社区版用户管理:CALL
• dbms.security.listUsers
• dbms.security.changePassword
• dbms.security.showCurrentUser
• dbms.security.createUser
• dbms.security.deleteUser
P355 Neo4j 用户权限和角色
P368 Neo4j 数据库运维与优化:内存优化、页面缓存大小、堆大小、调整垃圾收集器、事务日志。
P371 Neo4j 压缩存储及 Linux 文件系统调优
P374 Neo4j 数据库的备份与恢复。
P379 数据导入工具。
P382 Cypher Shell 工具使用。
P384 数据转储和加载 neo4j-admin dump, load
P387 Neo4j 集群技术:因果集群,高可用集群
P458 空间索引:Neo4j Spatial
P468 嵌入式模式下,中文全文检索:自定义分词,定义词典,Java 中定义 Neo4j 全文索引
P469 嵌入式模式下,全文检索查询
P476 自定义批量导入
P479 Neo4j 与 Apache Spark 集成
P521 Neo4j 配置设置,适用于配置到 neo4j.conf 文件。
P550 Neo4j 内建过程介绍:CALL db.labels(),db.indexes(), etc.

《Neo4J 权威指南》知识点总结相关推荐

  1. 动图图解!既然IP层会分片,为什么TCP层也还要分段?

    文章持续更新,可以微信搜一搜「golang小白成长记」第一时间阅读,回复[教程]获golang免费视频教程.本文已经收录在GitHub https://github.com/xiaobaiTech/g ...

  2. TCP粘包:我只是犯了每个数据包都会犯的错 |硬核图解

    事情从一个健身教练说起吧. 李东,自称亚健康终结者,尝试使用互联网+的模式拓展自己的业务.在某款新开发的聊天软件琛琛上发布广告. 键盘说来就来.疯狂发送"李东",回车发送!,&qu ...

  3. 爷青回!最近很火的朋友圈怀旧小电视源码来啦!看到最后一个视频我大呼好家伙!

    原文首发于公众号:[golang小白成长记] 爷青回!最近很火的朋友圈怀旧小电视源码来啦!看到最后一个视频我大呼好家伙! 体验一把怀旧小电视 最近朋友圈被怀旧小电视刷爆啦! 点开来,是一台老式电视机! ...

  4. 在linux下安装windows系统--仅仅支持efi主板+gtp+U盘安装

    本人已经安装成功: 材料: 1. U盘 2.电脑,bios支持efi shell 3.win8-x86-64位安装镜像cn_windows_8_1_x64_dvd_2707237.iso 4.EFI_ ...

  5. TCP粘包为什么会粘包? 背后的原因让人暖心

    事情从一个健身教练说起吧. 李东,自称亚健康终结者,尝试使用互联网+的模式拓展自己的业务.在某款新开发的聊天软件琛琛上发布广告. 键盘说来就来.疯狂发送"李东",回车发送!,&qu ...

  6. 活久见!TCP两次挥手,你见过吗?那四次握手呢?

    文章持续更新,可以微信搜一搜「小白debug」第一时间阅读,回复[教程]获golang免费视频教程.本文已经收录在GitHub https://github.com/xiaobaiTech/golan ...

  7. 【软件工程】McCabe方法,输入三角形三边,判断三角形性状,画出流程图和环图,计算环形复杂度,要求有判断是否能构成三角形的条件。

    话不多说,直接上图解,知识点在最后. 流程图 环图 环形复杂度 整合 知识点 环型复杂度的三种计算方法 V(G) = 流图中的区域数 V(G) = 流图中的判定数 + 1 V(G) = E - N + ...

  8. 【机器学习基础】8个知识点,图解K-Means算法

    来源:Python数据之道 作者:Peter 整理:Lemon 8个知识点,图解K-Means算法 之前,公众号分享了关于 KNN算法 的介绍,今天,我们来学习下另一个经典的算法:K-means算法. ...

  9. 30 张图解 | 高频面试知识点总结:面试官问我高并发服务模型哪家强?

       面试中经常会被问到高性能服务模型选择对比,以及如何提高服务性能和处理能力,这其中涉及操作系统软件和计算机硬件知识,其实都是在考察候选人的基础知识掌握程度,但如果没准备的话容易一头雾水,这次带大家 ...

  10. 万字整理,图解Linux内存管理所有知识点

    Linux的内存管理可谓是学好Linux的必经之路,也是Linux的关键知识点,有人说打通了内存管理的知识,也就打通了Linux的任督二脉,这一点不夸张.有人问网上有很多Linux内存管理的内容,为什 ...

最新文章

  1. 1196: 数星星(二)(结构体专题)_福利:最新导数6大专题!高分段提分有困扰?听北大状元漫谈提分...
  2. 向大家推荐一个C/C++通用Makefile
  3. html标签article,html标签中section与article 区别
  4. java软件字如何放大_放大Java Swing应用程序
  5. c语言中switch语句流程图_C语言:C语言保留字(关键字)
  6. 编辑index.html
  7. 多目标跟踪——MOT算法的学习笔记
  8. jQuery-4.动画篇---动画基础隐藏和显示
  9. Javascript之基本包装类型
  10. java 不变类_Immutable-不变模式与不变类-一版
  11. oracle数据库论文参考文献,ORACLE数据库管理研究
  12. orcad 连mysql_OrCAD Capture CIS元件库用mysql数据库
  13. 应届生年薪 40w 在杭州可以过上什么样的生活?
  14. Java 判断是否为大写字母
  15. java数组位置_java数组中如何查找元素的位置?
  16. [问题]mpu9250+bmp280数据读取
  17. 字节青训营第三课之高质量编程与性能调优实战的笔记和总结
  18. json在线编辑(xml转json,json视图,json格式检验,等等)神器
  19. 51单片机usb烧录电路_STC51单片机自动ISP下载电路设计 - ch340g单片机下载程序电路原理...
  20. 微软流媒体框架DirectShow

热门文章

  1. Towards Robust Deep Hiding Under Non-Differentiable Distortions for Practical Blind Watermarking论文阅读
  2. 机器人运动路径规划方法
  3. psd 免费素材网站
  4. switch-case和if-else的效率比较·必看
  5. iOS自动化--Spaceship使用实践
  6. mysql 逻辑值的真和假_( )逻辑值的“真”和“假”可以用逻辑常量TRUE和FALSE表示。_学小易找答案...
  7. Spring如何整合SpringMVC
  8. matlab主成分分析散点图_matlab主成分分析案例
  9. 给我三分钟,带你领略热血江湖中的并查集算法
  10. 2021年安全员-B证免费试题及安全员-B证实操考试视频