图数据库:neo4j学习笔记

本文详细介绍了Neo4j在Windows上的安装过程,包括桌面版和ZIP版的安装步骤,以及环境变量配置。还讲解了如何启动数据库、访问数据,特别是使用Cypher语言进行查询和操作,包括命令行工具cypher-shell的使用。此外,文章还涵盖了图数据库的基本元素如节点、关系、属性和标签的概念。
摘要由CSDN通过智能技术生成

参考

Windows安装

 参考

1、桌面版安装

下载地址:Neo4j Desktop Download | Free Graph Database Download

输入个人信息后,会有一个激活码,保存下来,后面要用!

直接默认安装,安装位置可改,第一次打开时会让你输入刚刚获取到的激活码。

2、zip安装

下载地址:Neo4j Deployment Center - Graph Database & Analytics

(此处下载是community版)

下载完成后,将压缩包解压到一个文件夹中

环境配置

新建变量名写:NEO4J_HOME, 变量值为刚刚的文件夹路径;

Path后面添加上路径:%NEO4J_HOME%\bin。

启动

在bin路径下打开cmd,输入:neo4j.bat console

出现以下为成功

若启动时JDK版本报错,可以安装指定版本JDK,并需要改下bin目录下的neo4j.bat, 把set "JAVA_HOME=XXXX"加入进去

 访问数据

自带的BI界面

在浏览器中输入:http://localhost:7474/

Username是 neo4j (这个用户名好像是不可以修改的)
Password默认是neo4j,zip版本第一次进入会提示你修改。

命令行工具 cypher-shell 

参考

Cypher-shell - 简书

cypher命令之后一定要加分号;否则无法运行,只能换行!!!

在shell里面执行cypher会比BI效率高,缺点就是不能可视化,不过可以导出到本地。

linux:在 NEO4J_HOME/bin 目录下,执行:cypher-shell,按照提示输入用户名、密码后进入

windows双击运行 cypher-shell.bat,

可以看到当前的账户名为neo4j,数据库为neo4j,直接输入cypher语句,可以批量执行cypher语句。 

 执行cypher脚本

写一个cypher脚本:run.cypher,保存在当前目录NEO4J_HOME/bin下

在cypher-shell界面使用source命令运行脚本:

 :source run.cql

 执行结果:

 未登录时可以执行下面语句

cat run.cypher | cypher-shell -a localhost:port -u username -p passwd

介绍

图是一组节点和连接这些节点的关系。图形数据存储在节点和关系在属性的形式。属性是键值对表示数据。Neo4j图数据库主要有以下组成元素:节点、属性、关系、标签

节点

节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录。

1、节点是主要的数据元素,节点通过关系连接到其他节点。节点可以具有一个或多个属性(即,存储为键/值对的属性)。

2、节点有一个或多个标签,用于描述其在图表中的作用。

属性

属性(Property)是用于描述图节点和关系的键值对。

1、属性是命名值,其中名称(或键)是字符串属性可以被索引和约束

2、可以从多个属性创建复合索引

关系

关系(Relationship)同样是图数据库的基本元素。关系就是用来连接两个节点,,其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。

1、关系连接两个节点关系是方向性的节点可以有多个甚至递归的关系。

2、关系可以有一个或多个属性(即存储为键/值对的属性)

3、基于方向性,Neo4j关系被分为两种主要类型:单向关系、双向关系

标签

标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。

1、标签用于将节点分组一个节点可以具有多个标签对标签进行索引。

2、以加速在图中查找节点本机标签索引针对速度进行了优化。
 

cyher

Neo4j的操作语言称为cyher,相当于关系数据库sql。

节点

Cypher 采用一对圆括号 () 来表示节点,如 (n:角色) 表示一个 角色 节点,n 是变量名,供命令执行时用 n 来访问这个节点,在命令执行完毕后就无法使用了。同时单独的 () 表示一个匿名节点,在匹配时表示匹配所有节点。

属性

(n:角色{name:'郭靖'}) ,{}中包含的name:'郭靖'就为一组属性键值对。

关系

--表示无方向的关系

--> 表示有方向的关系

-[r]-> 则给关系赋予一个变量名r,方便对这个关系进行操作

-[r:配偶]-> 匹配关系为 配偶 的类型

同时为了书写简单,可以为节点和关系语法赋予一个变量

//将所有 (角色)-[配偶]-() 的子图赋值给变量 p
p = (n:角色)-[r:配偶]-()

这样变量 p 就可以写到多个查询语句中,避免重复编写

关系路径长度匹配

在关系中,允许匹配特定路径长度的内容,如:

  • (n)-[*2]->(m) 表示关系数量为 2 的 3 个节点的匹配, 等价于 (a)-[]->()-[]->(b)
  • (n)-[*2..4]->(m) 匹配路径长度为 2 到 4 之间的路径
  • (n)-[*2..]->(m) 匹配路径长度大于 2 的路径
  • (n)-[*..4]->(m) 匹配路径长度小于 4 的路径
  • (n)-[*]->(m) 匹配任意长度的路径

列表

Cypher 支持列表操作,通过 [] 来创建列表。

常用语法

参考

1、知识图谱(3) Neo4j Cypher - 知乎

2、cypher语法:Cypher Cheat Sheet - Neo4j Documentation Cheat Sheet

3、neo4j中with语句的使用 - guoce的个人空间 - OSCHINA - 中文开源技术交流社区

在这里插入图片描述

CREATE

​我们应该使用此标签名称来访问节点详细信息。​

MERGE 命令是 CREATE 命令和 MATCH 命令的组合。 MERGE 在图中搜索给定模式,如果存在,则返回结果,如果不存在,则创建并返回结果。

1、创建一个没有属性的节点
CREATE (节点名称:节点标签名称)

2、创建一个有属性的节点
CREATE (节点名称:节点标签名称{ 属性名称1:属性值,属性名称2:属性值,属性名称3:属性值 })

3、创建两个节点和关系属性
CREATE(节点名称1:节点标签名称1{属性})-[关系名称:关系标签名称{属性}]->(节点名称2:节点标签名称2{属性})

MATCH

MATCH 命令用于从数据库中获取节点,关系的信息,类似于 SQL 中的 SELECT。RETURN 则是在 MATCH 搜索完成后返回数据,因此 MATCH 必须与 RETURN 同时使用。

ptional match 类似于 match,不同之处在于 optional match 在匹配不到内容时返回 null 方便查询继续进行,而 match 直接返回查询无结果

1、获取有关节点
match (变量名:节点的标签名称) return n

MATCH (变量名:节点的标签名称 {属性名称1:属性值,属性名称2:属性值}) RETURN 变量名

2、使用两个现有节点:节点标签名称1和节点标签名称2创建与属性的关系
MATCH (变量名1:节点标签名称1),(变量名2:节点标签名称2)
CREATE (变量名1)-[关系名称:关系标签名称{属性}]->(变量名2)
RETURN 关系名称

RETURN

RETURN 变量名,变量名.属性名称1

WHERE

WHERE 可以结合函数 exists() ,字符串匹配 starts with,ends with,contains,逻辑匹配 in,not,and,or 和正则表达式匹配进行更加精细的匹配,正则表达式的语法为 =~ 'regexp'。

 where 变量名.属性名称=属性值

DELETE

从数据库永久删除节点及其关联的属性。

DELETE 变量名列表

REMOVE

删除节点或关系的标签或属性

DELETE 变量名.属性名称
DELETE 变量名.标签名称
例如:
match (n:角色) where n.name='金轮法王' remove n.from return n
match (n:角色)-[r]-() where n.name='金轮法王' delete n,r
清空数据库:match (n) optional match (n)-[r]-() delete n,r


SET

用于给现有节点或关系添加新属性,因此,SET 需要配合 MATCH 使用。

SET 变量名.属性名= 属性值
例如:match (n:角色) where n.name='杨过' set n.nickname='西狂' return n

唯一索引

参考:

1、Spring Data Neo4j 4中的唯一索引 | 那些遇到过的问题

2、Neo4j - 创建唯一约束 - 蝴蝶教程

CREATE CONSTRAINT ON (n:User) ASSERT n.user_id IS UNIQUE;

常用函数

 参考

Neo4j 常用函数介绍 - 文章详情

谓词函数(返回true或者false)

Exists():用于检查是否存在或满足特定的条件。

all():表示所有的元素都满足条件

any():表示至少一个元素满足条件

none():表示没有一个元素满足条件

single():表示只有一个元素满足条件

标量函数(变量函数返回标量值)

1、获得节点和关系的ID和属性

id():返回节点或关系的ID

properties():返回节点或关系的属性(Map)
2、关系

endNode(relationship):返回关系的结束节点

startNode(relationship):返回关系的开始节点

type(relationship):返回关系的类型

3、列表相关

coalesce():返回列表中个非NULL的元素

head():返回列表中的个元素

last():返回列表中的有一个元素

size():返回列表中元素的数量

4、size()和length()函数

size(string):表示字符串中字符的数量,可以把字符串当作是字符的列表。
size(list):返回列表中元素的数量。
size(pattern_expression):也是统计列表中元素的数量,但是不是直接传入列表,而是提供模式表达式(pattern_expression),用于在匹配查询(Match query)中提供一组新的结果,这些结果是路径列表,size()函数用于统计路径列表中元素(即路径)的数量。

length(path):返回路径的长度,即路径中关系的数量

聚合函数(聚合函数用于对查询的结果进行统计)

avg():计算均值

count(exp):用于计算非null值(value)的数量,使用 count(distinct exp)进行无重复非null值的计数,使用count(*):计算值或记录的总数量,包括null值

max()、min():求大值和小值,在计算极值时,null被排除在外,min(null)或max(null)返回null

sum():求和,在求和时,null被排除在外,sum(null)的结果是0

collect():把返回的多个值或记录组装成一个列表,collect(null)返回一个空的列表

列表函数

1、抽取元素构成列表

extract(variable IN list | expression):根据抽取的值组装成一个列表,返回一个列表

2、过滤列表元素

filter(variable IN list WHERE predicate):把过滤后的元素组成一个子表,返回该列表

3、获得列表

keys(node):从节点的属性中抽取属性键

labels(node):节点标签的列表

nodes(path):从路径中获取所有节点的列表

relationships(path):从路径中获得所有的关系

4、序列的生成和倒置

range():用于生成一个有序的序列

reverse():把原始列表的元素进行倒置

5、迭代计算列表

reduce(accumulator = initial, e IN list | expression):应用在列表上,对列表中的每个元素e进行迭代计算,在元素e上运行表达式(expression),把当前的结果存储在累加器中,进行迭代计算,并返回终计算的标量结果

常用语句

根据用户ID删除用户拓扑关系

MATCH data=(endNode:User{user_id:"111111"})<-[line:DOWNSTREAM_OF*1..]-(startNode) delete data

根据用户ID修改用户属性

MATCH (a:User {user_id:'83b0a94642dd2b19fa408183538ad6a9'}) SET a.user_id='1111111111';

根据用户ID删除用户节点和关系

MATCH data=(endNode:User{user_id:"1bb5be145e13d8d4b3ce4f470446e16d"})-[line]-(startNode) delete endNode,line

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值