1 介绍
1.1 背景
最近接收同事的代码,用到了 Neo4j ,作为一名 Javaer ,看到 Neo4j ,完全是一脸懵逼的状态,不知道是什么玩意儿,经过一周的系统学习,总算弄清楚了以下知识:
- Neo4j 是什么东西,干嘛用的
- 怎么安装部署
- 怎么使用呢
- SpringBoot 怎么接入 Neo4j 呢
下面把我学到的东西、踩过的坑分享给大家
1.2 Neo4j 是什么
传统关系型数据库,比如 MySQL ,而 Neo4j 是非关系型数据库。
Neo4j 采用属性图模型,将数据解构为:节点(Nodes)、关系(Relationships)、和属性(Properties)
1.3 核心概念
1.3.1 节点(Node)
节点(Node)是图数据库中的一个基本元素,用以表示一个实体记录,就像关系型数据库中的一条记录一样。在 Neo4j 中节点可以包含多个属性(Property)和多个标签(Label),标签用于表示这些标签是属于哪一类
如人、公司、电影。每个节点可以包含标签用于分类(如:Person),以及键值对形式的属性来存储元数据(如:{name: "Alice"}),是构建图结构的基础单元
1.3.2 关系(Relationship)

上图中,两个节点存在之后,关系(Relationship)是用来把两个节点连接起来的一条关系边
关系(Relationship)同样是图数据库中的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论的边(Eege),其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type)
关系的类型是定义其性质的,比如类型是 friend ,表示朋友。同时也可以携带属性信息,比如 {since: 2026} ,表示两个人(也就是两个节点)的关系类型是朋友,是 2026 年才开始做朋友。它赋予了数据网络的动态语义和关联价值
关系有如下特点:
- 两个节点之间可以有多个关系,比如 2 个人之间,既是朋友,又是同学,那朋友是一条关系,同学又是一条关系
- 关系必须有开始节点(Start node)和结束节点(End node),两头都不能为空
- 节点可以被串联或并联起来
- 一个节点可以存在指向自己的关系

1.3.3 属性(Property)
前面说到,节点(Node)有属性,关系(Relationship)也有属性,那属性有哪些类型呢?
| 类型 | 说明 | 取值范围 |
|---|---|---|
| boolean | 布尔值 | true 或 false |
| byte | 8 位的整数 | -128 到 127 |
| short | 16 位的整数 | -32768 到 32767 |
| int | 32 位的整数 | -2^32 到 2^32 - 1 |
| long | 64 位的整数 | -2^63 到 2^63 - 1 |
| float | 32 位 IEEE 754 标准浮点数 | / |
| double | 64 位 IEEE 754 标准浮点数 | / |
| char | 16 位无符号整数代表的字符 | u0000 到 ufff (0 to 65535) |
| string | Unicode 字符序列 | / |
看到这儿,是不是很熟啊,这不就是 Java 中的类型吗?
1.3.4 路径(Path)
当使用节点和关系创建了一个图后,在此图中任意两个节点间都是可能存在路径的。图中任意两个节点都存在由节点和关系组成的路径,路径也有长度的概念,也就是路径中关系的条数

上图中,节点和关系组成了一个复杂的网状,也就是图。从一个节点开始寻找另一个节点,比如从 Node 1 开始,找到 Node 5,路径是这样的:
Node1 -> Node4 -> Node3 -> Node5
路径的长度是 3,因为从 Node 1 到 Node 5 ,要走 3 步
路径的长度也就是 路径中关系的条数
2 Windows 下载安装
花了 2 个小时,终于把 Neo4j 的 Windows 社区版在给下载下来了,真是太不容易了
2.1 官网下载(下不了)
官网地址:https://neo4j.com/

页面滑到底,找到,Community Edition,它就是社区版

Download Now

之后就来到了 Deployment center 部署中心

页面往下滑,就能看到社区版了,ENTERPRISE 是企业版的意思,COMMUNITY 才是社区版

版本可以选择

环境选择 Windows

最后就可以点击下载了

但是很可惜,点了下载之后页面一直转

即使科学上网,也会显示 403

最后迫不得已,问了下千问,得到的答案居然是让我去 Maven 仓库下载,提供的链接也能打开,问题是里面全是 Jar 包啊,而我要下载的是安装包

2.2 保证能下载
下载地址:https://fossies.org/windows/misc/neo4j-community-5.26.28-windows.zip/index_o.html
最后迫不得已,打开了 CodeX ,没聊几句就给我了我一个第三方下载地址

抱着试一试的态度,发现还真能打开,点击 neo4j-community-5.26.28-windows.zip

点击之后来到了如下页面

英文我也看不懂,就科学上网翻译了一下

输入一个描述词语或关于 Fossies 的简短评论 ,这话太抽象了,当我准备输入 IP 时,突然想到不能随便暴露我的 IP,想了一分钟,为了表示我激动的心情,想到输入:谢谢

没想到最后还真能下载,神奇啊
2.3 验证
下载之后如下图所示

由于【下载】这个目录是中文的,所以我把压缩包移动到我的工具目录下

Window 左下角,输入 po ,就会出现 Windows PowerShell

双击打开

进入我的工具目录下

输入命令:
Get-FileHash neo4j-community-5.26.28-windows.zip -Algorithm SHA256
得到了 SHA256

在官网点击 SHA-256,就会出现一段字符串,和我的对比,除了字母大小写,其它全一致,说明在第三方网站下载的安装包和官网的安装包是一模一样的

至此,下载和验证都通过
2.4 Neo4j 官方文档
还是回到 Neo4j 官网:https://neo4j.com/
Neo4j 中文文档:https://neo4j.ac.cn/docs/operations-manual/current/
页面滑到底,找到 Documentation,它就是文档的意思

找到 Docs ,它表示文档列表,有个 Operations ,它表示操作

然后就来到了每个版本对应的文档

我选择 5.26 版本,Installation 就是安装的意思,Windows installation 就是 Windows 安装的意思

科学上网把页面翻译一下

官方文档中明确说明,需要安装 JDK 17 ,也支持 JDK 21
JDK 下载地址:https://www.oracle.com/java/technologies/downloads/

至于怎么安装 JDK ,相信大家都会了,我就不再介绍了
2.5 配置环境变量
电脑左下角直接搜环境变量

环境变量

新建,输入 NEO4J_HOME 和路径

点击确定之后

然后还需要配置 path ,点击 编辑

新建,输入 neo4j 的 bin 目录

由于 path 配置的是物理路径,而不是像 JAVA_HOME 那样 配置,%JAVA_HOME%\bin,这里没有配置 %NEO4J_HOME%\bin,所以其实不需要配置 NEO4J_HOME 这个环境变量,只需要配置 path 这一个环境变量就行
验证一下,Win + R,输入
neo4j --version

打印出了版本号,说明安装成功了
2.6 启动
进入 neo4j 的 bin 目录下,执行:
# 安装 neo4j 服务
neo4j.bat console

浏览器访问 http://localhost:7474 ,没想到居然是 404

查了半天,不知道是什么原因,最后只能尝试另外一种启动方式

官网介绍,需要先安装服务,然后再启动,下面试一下
安装 Windows 服务:
# 注意,必须是在 bin 目录下执行
neo4j windows-service install

启动 Neo4j:
neo4j start

浏览器访问:http://localhost:7474 ,这次终于可以访问了

用户名和密码默认都是 neo4j,点击【连接】,第一次登录需要重置密码

重置密码之后就来到了如下页面

2.7 卸载服务
安装 Windows 服务,我不知道在我电脑上安装了什么,但是我想卸载,怎么办

官方文档中给出了命令
# 卸载 Windows 服务
neo4j windows-service uninstall
# 删除 NEO4J_HOME
rmdir NEO4J_HOME
3 Docker 下载安装
3.1 官方文档
Neo4j 中文文档:https://neo4j.ac.cn/docs/operations-manual/5/docker/
官方文档中有详细介绍 Docker 部署 Neo4j 的方法

如何获取镜像,镜像名叫什么,文档中也有介绍

甚至启动命令都帮你写好了

可能大家会问:怎么没有数据持久化呢?别急,官方文档中也帮你写好了

启动脚本中的 NEO4J_AUTH 是什么意思?是初始化密码

3.2 下载镜像
看了官方文档,想必大家已经知道镜像名叫什么了吧,镜像名明显就叫:neo4j:5.25.1

所以下载镜像:
docker pull neo4j:5.25.1
但是我使用的镜像是:neo4j:5.26.16-community
所以下载镜像:
docker pull neo4j:5.26.16-community
查看镜像:
docker ps | grep neo4j

3.3 编写启动脚本
base=$(pwd)
docker run -d --name neo4j-huq --restart always \
-p 1474:7474 -p 1687:7687 \
-v $base/data:/data \
-e NEO4J_AUTH=neo4j \
-e TZ=Asia/Shanghai \
neo4j:5.26.16-community
可能大家看不懂,下面写一份注释版
# 获取当前目录的路径
base=$(pwd)
# 容器的名字是 neo4j-huq
docker run -d --name neo4j-huq --restart always \
# 两个端口映射,容器内的7474端口映射到服务器的1474端口,容器内的7687端口映射到服务器的1687端口
-p 1474:7474 -p 1687:7687 \
# 数据持久化,把容器内的 /data 目录 映射到服务器的当前目录下的 data 目录
-v $base/data:/data \
# 环境变量:指定初始化密码
-e NEO4J_AUTH=neo4j \
# 环境变量:设置容器内的时候为上海时间
-e TZ=Asia/Shanghai \
# 镜像名称
neo4j:5.26.16-community
3.4 访问
浏览器访问 http://ip:1474