Neo4j学习笔记

Neo4j 学习笔记/入门使用

By 一只壹吾鱼

  • 最近这段时间在学习neo4j,顺带整理了一下基本的Cypher命令语句,供参考

文章目录

      • 1. 环境配置
        • 1.1 jdk的配置
        • 1.2 neo4j的配置
          • 1.2.1 neo4j的官网下载社区版
          • 1.2.2 neo4j环境部署
            • 1.2.2.1 压缩包选好路径进行解压
            • 1.2.2.2 新建系统变量
            • 1.2.2.3 编辑环境变量
          • 1.2.3 运行neo4j
          • 1.2.4 打开Neo4j集成的浏览器
      • 2.常用命令操作
          • 2.2.1 CQL简介
          • 2.2.2 load csv批量创建节点
          • 2.2.3 create创建节点
            • 2.2.3.1 创建一个节点
            • 2.2.3.2 创建多个节点
            • 2.2.3.3 创建带有标签和属性的节点并返回节点
            • 2.2.3.4 创建多个标签的节点
          • 2.2.4 create创建关系
            • 2.2.4.1 使用新节点创建关系
            • 2.2.4.2 使用已知节点创建带属性的关系
            • 2.2.4.3 检索关系节点的详细信息
            • 2.2.4.4 创建全路径
          • 2.2.5 match查询
            • 查询自动生成的id
          • 2.2.6 return返回
          • 2.2.7 where子句
          • 2.2.8 delete删除
          • 2.2.9 remove删除
            • 2.2.9.1 删除属性
            • 2.2.9.2 删除标签
          • 2.2.10 set子句
            • 修改标签的名称或者关系
          • 2.3.11 order by排序
          • 2.3.12 union子句
            • 2.3.12.1 union
            • 2.3.12.2 union all
          • 2.3.13 limit 和 skip子句
            • 2.3.13.1 limit子句
            • 2.3.13.2 skip子句
          • 2.3.14 null值
          • 2.3.15 in操作符
          • 2.3.16 index索引
          • 2.3.17 unique约束
          • 2.3.18 distinct关键字
          • 2.3.19 count计数
      • 3. 常用函数
        • 3.1 String字符串函数
        • 3.2 Aggregation聚合函数
        • 3.3 Relationship关系函数
      • 4. neo4j-admin使用
        • 4.1 数据库备份
        • 4.2 数据库恢复
        • 4.3 切换数据库

1. 环境配置

1.1 jdk的配置
  • 安装好jdk11
1.2 neo4j的配置
1.2.1 neo4j的官网下载社区版
  • 下载官网:Neo4j Download Center - Neo4j Graph Data Platform

Neo4j学习笔记_第1张图片

最新4.0版本以上的JDK最好为适配为jdk11,3.0版本的适合jdk8

问题:遇到下载后的压缩包想要迁移位置,显示无法复制或者粘贴,需要以管理员的身份运行一下360压缩包.exe这个操作就行,然后再进行复制粘贴或者解压都没有问题了。

1.2.2 neo4j环境部署
1.2.2.1 压缩包选好路径进行解压
1.2.2.2 新建系统变量

我的电脑–右键–属性–高级系统设置–环境变量–新建系统变量

变量名:NEO4J_HOME

变量值:Neo4j解压后存放的位置,我的是:D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10

1.2.2.3 编辑环境变量

我的电脑–右键–属性–高级系统设置–环境变量–选中path–编辑–新建–增加%NEO4J_HOME%bin(因为怕不成功,可以写完整的绝对路径D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10\bin)

Neo4j学习笔记_第2张图片

Neo4j学习笔记_第3张图片

其次还需要保证有PowerShell这一项↓

Neo4j学习笔记_第4张图片

1.2.3 运行neo4j

使用win+R键输入cmd回车进入DOS界面,转到neo4j安装目录下的bin文件夹:

再输入启动命令:neo4j console

  • windows+R→cmd→cd /d d:cd D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10\binneo4j console

  • 进入浏览器网址:http://localhost:7474/

  • 使用的是neo4j默认数据库

Neo4j学习笔记_第5张图片

1.2.4 打开Neo4j集成的浏览器

http://localhost:7474/

可以修改密码

Neo4j学习笔记_第6张图片

Neo4j学习笔记_第7张图片

2.常用命令操作

2.2.1 CQL简介

1、它是Neo4j图形数据库的查询语言。
2、它是一种声明性模式匹配语言
3、它遵循SQL语法。
4、它的语法是非常简单且人性化、可读的格式。

CQL命令 用法
create 创建节点,关系和属性
match 检索有关节点,关系和属性数据
return 返回查询结果
where 提供条件过滤检索数据
delete 删除节点和关系
remove 删除节点和关系的属性
order by 排序检索数据
set 添加或者更新标签

比如,“(fox) < -[:knows]-(周瑜)-[:knows]->(诸葛)-[:knows]->(fox)”
( ) 表示节点
fox 表示节点的属性
[ ] 表示关系
:knows 表示关系的属性
–>表示关系的走向

Neo4j学习笔记_第8张图片

2.2.2 load csv批量创建节点
  • 快捷键:
    ① 在输入框中shift+enter为换行输入,enter键/点击蓝色小三角形为执行操作
    ② Ctrl or Shift + scroll(鼠标中轮滚动)控制面板放大/缩小
load csv from "file:///honglou.csv" as line
create (:honglouRelation {from:line[1],relation:line[3],to:line[0]})

load csv from "file:///person.csv" as line
create (:person {name:line[0]})

Neo4j学习笔记_第9张图片

Neo4j学习笔记_第10张图片

  • 可看到生成的关系节点

Neo4j学习笔记_第11张图片

Neo4j学习笔记_第12张图片

问题:如果看到节点里面是空白没有数据/显示的是数字(即id号),想要显示文字。这是因为节点有多个属性,系统不知道要显示哪个,解决办法就是点击右边的收缩框,再点击person标签,选择想要显示的属性值就行。

Neo4j学习笔记_第13张图片

2.2.3 create创建节点
2.2.3.1 创建一个节点
# 创建一个节点
create (n) 
           e.g.创建一个标签为student的节点  create (:student)

Neo4j学习笔记_第14张图片

2.2.3.2 创建多个节点
# 创建多个节点
create (m),(n)
              e.g.  create (:student),(:teacher)

Neo4j学习笔记_第15张图片

2.2.3.3 创建带有标签和属性的节点并返回节点
# 创建带有标签和属性的节点并返回节点
create (n:student {name:"小李"}) return n

Neo4j学习笔记_第16张图片

2.2.3.4 创建多个标签的节点
create (:student1:teacher1 {name:"coco"})
# 或者
create (n:student1:teacher1 {name:"Tom"})

Neo4j学习笔记_第17张图片

2.2.4 create创建关系

​Neo4j图数据库遵循属性图模型来存储和管理其数据。 根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。 基于方向性,Neo4j关系被分为两种主要类型:单向关系和双向关系。

2.2.4.1 使用新节点创建关系
# 1、使用新节点创建关系
create (m:t_stu {name:"小君"})-[r:老师]->(n:t_stu {name:"冯老师"}) return type(r)

Neo4j学习笔记_第18张图片

Neo4j学习笔记_第19张图片

问题:用这个语句新建立了两个标签student1和teacher,这两个标签的两个节点之间又建立了联系,很明显不是我们想要的(想要在同一个标签里面的两个节点建立关系);接着用命令:match (m:student1) delete m删掉是会报错提示说“两个标签的节点之间还存在联系,需要先将节点间关系删除”,所以再用命令:match (m:student1 {name:"小桐"})-[r]->(n) delete r 将其关系成功删除

Neo4j学习笔记_第20张图片

  • 问题:不知道是不是neo4j是最新版4.0以上版本的缘故,看别人教程笔记里面写着create (m:t_stu {name:"小君"})-[r:"老师"]->(n:t_stu {name:"冯老师"}) return type(r)中间的关系r:"老师"这里是有双引号的,但是这里最新版的加上去就会报错,去掉就没问题了。
2.2.4.2 使用已知节点创建带属性的关系
# 2、使用已知节点创建带属性的关系
match (n:student {name:"小李"}),(m:student {name:"小吴"}) create (n)-[r:同桌]->(m) return r
# 或者关系中带上``这种类似单引号的引号也可以,就在数字键盘1的左边,英文状态下
match (n:student {name:"小李"}),(m:student {name:"小吴"}) create (n)-[r:`同桌`]->(m) return r

Neo4j学习笔记_第21张图片

Neo4j学习笔记_第22张图片

2.2.4.3 检索关系节点的详细信息
# 3、检索关系节点的详细信息
match (n:student)-[r]->(m:student) return n,m

Neo4j学习笔记_第23张图片

2.2.4.4 创建全路径
# 4、创建全路径
create p=(:student{name:"小赵"})-[:后桌]->(:student{name:"小李"})<-[:前桌]-(:student{name:"小迪"}) return p

Neo4j学习笔记_第24张图片

Neo4j学习笔记_第25张图片

点击student标签,此小李非彼小李,id不同

2.2.5 match查询
# Neo4j CQL MATCH命令用于:
# 1、从数据库获取有关节点和属性的数据;
# 2、从数据库获取有关节点,关系和属性的数据。
match (n:student) return n limit 25

match (n:student {name:"小赵"}) return n
# 或者
match (n:student) where n.name="小赵" return n.name

Neo4j学习笔记_第26张图片

查询自动生成的id
match (n:formal) where id(n)=2124 return n

Neo4j学习笔记_第27张图片

2.2.6 return返回
# Neo4j CQL RETURN 子句用于
# ·检索节点的某些属性
# ·检索节点的所有属性
# ·检索节点和关联关系的某些属性
# ·检索节点和关联关系的所有属性
match (n:student) return id(n),n.name

Neo4j学习笔记_第28张图片

2.2.7 where子句
# 像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。
match (n:student) where n.name="小李" or n.name="小赵" return n

Neo4j学习笔记_第29张图片

# 创建关系(已存在的节点)
match (n:student),(m:student) where n.name="小赵" and m.name="小吴" create (n)-[r:邻居]->(m) return n.name,type(r),m.name

Neo4j学习笔记_第30张图片

Neo4j学习笔记_第31张图片

2.2.8 delete删除
# 删除节点(前提:节点不存在关系!!!)
match (n:student{name:"小张"}) delete n

# 删除关系(存在关系的节点想要删除必须先删除其关系)
match (n:student{name:"小赵"})<-[r]-(m) delete r return type(r)

# 删除由两个标签建立的关系以及节点都会被删掉(delete p这里是关键)
MATCH p=(n:person{name:"贾宝玉"})-[r:`关系`]->(m) delete p return type(r)

# 删除某个节点的某个关系
match (n:person{name:"贾宝玉"})-[r:`关系`]-() delete r

参考:Neo4j删除节点和关系、彻底删除节点标签名 - 走看看 (zoukankan.com)

2.2.9 remove删除
2.2.9.1 删除属性
# 删除属性
match (n:student {name:"小吴"}) remove n.age return
2.2.9.2 删除标签
# 删除标签
match (m:student1:teacher1 {name:"coco"}) remove m:teacher1 return m

Neo4j学习笔记_第32张图片

↑前后↓对比

Neo4j学习笔记_第33张图片

2.2.10 set子句

​有时,我们需要向现有的节点或关系添加新属性。要做到这一点,Neo4j CQL提供了一个set子句。

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
match (n:student {name:"小赵"}) set n.age=18 return n

Neo4j学习笔记_第34张图片

修改标签的名称或者关系

图数据库neo4j中修改标签和关系 - 知乎 (zhihu.com)

比如把标签为“jiegou”的修改成标签为“结构”

match(n:jiegou) remove n:jiegou set n:结构
2.3.11 order by排序

​Neo4j CQL在match命令中提供了“order by”子句,对match查询返回的结果进行排序。排序有两种顺序:升序和降序。默认情况下,按照升序进行排序。如果要进行降序排序,需要使用desc子句。

match (n:student) return id(n),n.name order by id(n) desc

Neo4j学习笔记_第35张图片

2.3.12 union子句

与SQL一样,Neo4j CQL有两个子句,将两个不同结果过合并成一组结果。

2.3.12.1 union
# 它将两组结果中的公共行组合并返回到一组结果中,它不从两个节点返回重复的行。
# 限制:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
match (m:person) return m.name as name union match (n:role) return n.name as name
2.3.12.2 union all
# 它结合并返回两个结果集的所有行成一个单一的结果集。它还返回有两个节点重复行。
# 限制:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。
match (m:person) return m.name as name,"person" as p union all match (n:movie) return n.title as name,"movie" as p

Neo4j学习笔记_第36张图片

Neo4j学习笔记_第37张图片

2.3.13 limit 和 skip子句

​Neo4j CQL已提供LIMIT子句和SKIP来过滤或限制查询返回的行数。

2.3.13.1 limit子句
# limit 返回前几行
match (n:student) return n limit 2
2.3.13.2 skip子句
# skip 忽略前几行
match (n:student) return n skip 2
2.3.14 null值

Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。

match (n:student) where n.sex is null return id(n),n.name
2.3.15 in操作符

与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。

match (m:student) where m.name in["小李","小赵"] return id(n),m.name
2.3.16 index索引

Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。我们可以为具有相同标签名称的所有节点的属性创建索引。可以在match或where或in运算符上使用这些索引列来改进CQL Command的执行。

# 创建索引
create index on:student (name)
# 删除索引
drop index on:student (name)
2.3.17 unique约束

在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使我们使用相同的值,它也会插入一个新行。根据我们对某些节点或关系的应用需求,我们必须避免这种重复。

像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束。

UNIQUE约束的优点

  • 避免重复记录
  • 强制执行数据完成性规则
# 创建唯一约束
create constraint on (m:student) assert m.name is unique
# 删除唯一约束
drop constraint on (m:student) assert m.name is unique

Neo4j学习笔记_第38张图片

2.3.18 distinct关键字

用法就像SQL中的distinct关键字,返回的是所有不同值。

match (m:student) return distinct(m.name)
2.3.19 count计数

因neo4j显示有限,最多只能显示300个节点,所以可以利用代码来得到节点数

# 得到节点数
match (m:sentence) return count(m)

Neo4j学习笔记_第39张图片

# 得到关系数量
match (m)-[r:`包含诗句有`]->(n) return count(r)

Neo4j学习笔记_第40张图片

3. 常用函数

函数 用法
String 字符串 它们用于使用String字面量
Aggregation 聚合 它们用于对CQL查询结果执行一些聚合操作
Relationship 关系 他们用于获取关系的细节,如startnode,endnode等
3.1 String字符串函数

与SQL一样,Neo4j CQL提供了一组String函数,用于在CQL查询中获取所需的结果。

功能 描述
UPPER 它用于将所有字母更改为大写字母
LOWER 它用于将所有字母改为小写字母
SUBSTRING 它用于获取给定String的子字符串
REPLACE 它用于替换一个字符串的子字符串
match (n) return id(n),n.name,substring(n.name,0,2)
3.2 Aggregation聚合函数

和SQL一样,Neo4j CQL提供了一些在RETURN子句中使用的聚合函数。它类似于SQL中的GROUP BY子句。我们可以使用match命令中的return+聚合函数来处理一组节点并返回一些聚合值。

聚集功能 描述
COUNT 它返回由MATCH命令返回的行数
MAX 它返回由MATCH命令返回的一组行的最大值
MIN 它返回由MATCH命令返回的一组行的最小值
SUM 它返回由MATCH命令返回的所有行的求和值
AVG 它返回由MATCH命令返回的所有行的平均值
match (n) return count(n)
3.3 Relationship关系函数

Neo4j CQL提供了一组关系函数,以在获取开始节点、结束节点等细节时知道关系的细节。

功能 描述
STARTNODE 它用于知道关系的开始节点
ENDNODE 它用于知道关系的结束节点
ID 它用于知道关系的ID
TYPE 它用于知道字符串表示中的一个关系的TYPE
match (m)-[r]->(n) return id(r),type(r)

4. neo4j-admin使用

4.1 数据库备份

​ 对Neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j

cd %NEO4J_HOME%/bin
# 关闭neo4j
neo4j stop
# 备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump

比如:首先要在D盘下建立一个文件夹neo4j_graph_db,然后再执行命令

Neo4j学习笔记_第41张图片

在这里插入图片描述

4.2 数据库恢复

​ 还原、迁移之前,要关闭neo4j服务

# 数据导入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db --force
# 重启服务
neo4j start
4.3 切换数据库

(39条消息) Neo4j如何在不删除原来数据库的基础上创建新数据库和切换数据库_微莱羽墨的博客-CSDN博客

我自己的:D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10\conf

(41条消息) neo4j4.0.6创建新的数据库_当一颗恒星的博客-CSDN博客_neo4j创建数据库

The End
念念不忘,必有回响

你可能感兴趣的:(Neo4j,neo4j,知识图谱)