
简介Neo4j Community 5.26.17 Windows 安装包面向需要在 Windows 环境下快速搭建图数据库的开发者、数据分析师与后端工程师基于官方最新稳定社区版打包有效解决直接访问国外资源不便的问题。使用前需配置 JDK17 及以上运行环境。压缩包共 251 个文件体积约 116.87MB主体为 224 个 jar 库文件内置 Neo4j 浏览器及各类功能依赖bat/ps1 脚本用于服务启动、停止与命令行运维conf 文件用于配置数据库参数和认证策略exe 程序支撑 Windows 服务注册cer 与 license 文件保障组件校验和许可完整性。已有 187 人浏览学习。下载即获得可直接部署的社区版完整套件支持属性图存储、Cypher 查询、索引与可视化交互既适合本地开发调试和图数据库原理学习也可作为小规模项目的基础运行环境。1. neo4j-community-5.26.17-windows.zip 在解决谁的什么问题如果你要在 Windows 上跑一个真正的图数据库而不是只看可视化 Demoneo4j-community-5.26.17-windows.zip 这个 ZIP 包就是最常被下载、也最容易被装坏的东西。它本质上是 Neo4j 社区版 5.26.x 在 Windows 下的免安装压缩包不写注册表、不强制装服务解压、配好 JDK 和 conf就能用 HTTP 和 Bolt 端口对外提供图数据库服务。它能解决从零搭建本地图数据库、导入关系数据、跑 Cypher 查询这三类诉求也顺带打通了「构建知识图谱」这件事的落地路径。适合刚接触图数据库的人也适合要在内网环境里快速部署一个单机实例的运维但别指望社区版自带高可用与集群能力那部分要另找企业版。2. 在 Windows 上落地社区版 ZIP发行版选型与两个前置条件2.1 为什么建议直接用 ZIP 包三种 Windows 安装形态的差异拿到 neo4j-community-5.26.17-windows.zip 之前很多人已经在官网看到过另外两个选择Neo4j Desktop 和 Windows 安装包。Desktop 是一个带图形界面的管理壳内置了 JVM 和多个数据库实例的管理能力新手用起来顺手但它会额外占掉几百 MB 内存而且它管理实例的配置方式跟裸 ZIP 不完全一样很多人用 Desktop 调好的配置换到服务器上又得重学一遍。Windows 安装包msi/exe则会把 Neo4j 注册成 Windows 服务安装简单但卸载不干净、服务自启和端口占用问题反而更麻烦。我更推荐直接用这个 ZIP 包原因很朴素它把整个数据库塞在一个目录里bin、conf、data、import、plugins 全在一起想备份就打包目录想换机器就整体搬走。这一点在 Windows Server 上尤其重要因为生产环境经常不允许随便装带 GUI 的软件ZIP 包解压即用删掉即清。下面这张表列出了三种形态的关键差异方便你按自己的场景选。安装形态是否自带 JDK服务化方式适合人群常见痛点社区版 ZIP否需自备 JDK 17手动 neo4j.bat install-service服务器部署、熟悉命令行环境变量和路径问题Neo4j Desktop是内置管理不对外暴露服务新手学习、前端开发占用高、配置与裸实例不一致Windows 安装包否安装时注册服务临时体验卸载残留、端口冲突难排查如果你只为了学 Cypher 和试数据模型用 Desktop 没问题但如果你想把这套东西最终落到一台内网 Windows 机器上长期跑ZIP 包是少走弯路的选择。社区版没有集群和高可用这一点要在选型时就想清楚单机图数据库的上限就是一台机器的 CPU 和内存。2.2 JDK 17 与 JAVA_HOME两个翻车率最高的前置项Neo4j 5.x 的 ZIP 包不捆绑 JDK启动时直接找系统里的java命令。如果你机器上装的是 JDK 8 或 11双击批处理或者用命令行启动时会看到类似Unsupported Java version的提示或者窗口一闪而过。我先说结论装 JDK 17并且把JAVA_HOME显式指向它不要在 PATH 里靠运气。常见做法是装 Eclipse Temurin 或 Oracle JDK 17安装时勾选「设置 JAVA_HOME」那个选项。如果已经装好但环境变量没配可以用 PowerShell 先临时指定验证能跑通后再固化到系统变量# 临时指定 JDK 17只对当前终端窗口生效 $env:JAVA_HOME C:\Program Files\Java\jdk-17 $env:Path $env:JAVA_HOME\bin;$env:Path # 验证版本必须是 17.x 才算过 java -version看到版本输出之后再把它写成用户级永久变量注意setx不会影响当前已打开的窗口设置完要新开一个终端setx JAVA_HOME C:\Program Files\Java\jdk-17这里有个容易迷惑的点Neo4j 5.26 的启动脚本里JVM 参数和内存配置都写死在 conf 里它不读系统JAVA_OPTS所以不要浪费时间在系统环境变量里加 JVM 参数那部分只有在手动写启动命令时才有效。JAVA_HOME配错的表现也非常典型启动脚本能找到 java.exe但版本不对于是 Neo4j 在检测 JVM 阶段直接退出日志里只留下几行Java HotSpot(TM) 64-Bit Server VM warning看不出具体原因。2.3 解压路径别带空格目录结构与 NEO4J_HOME 的最小规范把 ZIP 解压到哪个目录直接决定后面百分之八十的报错是否出现。我的建议是解压到盘符根目录下的短路径比如C:\neo4j-community-5.26.17不要放到C:\Program Files这种带空格的目录不要放到带中文的路径也不要有很深的层级。Neo4j 的脚本在拼接 classpath 时对路径里的空格处理不够稳健服务化启动时更容易出问题。解压完成后目录应该是这样的结构C:\neo4j-community-5.26.17\ ├── bin\ # neo4j.bat / neo4j-admin.bat / cypher-shell.bat ├── conf\ # neo4j.conf 主配置文件 ├── data\ # 数据文件、事务日志 ├── import\ # LOAD CSV 默认读取目录 ├── plugins\ # APOC 等插件放这里 └── logs\ # 运行日志如果你所在的环境经常要用命令行切目录可以把NEO4J_HOME也配成环境变量指向这个根目录。注意这只方便你自己敲命令Neo4j 本身不强制要求NEO4J_HOME它靠脚本自身位置定位。接下来做一步最小验证先用前台模式启动一次确认整套链路是通的再谈配置优化。Set-Location C:\neo4j-community-5.26.17 .\bin\neo4j.bat console如果一切正常控制台会打印出版本号、数据库名称、HTTP 和 Bolt 端口最后一行出现类似Started.的日志。看到它说明 ZIP 包在你的机器上已经能跑了。此时浏览器访问http://localhost:7474会进入 Neo4j Browser第一次会让你改默认密码。前台模式的好处是日志直接打在屏幕上出了问题能立刻看到堆栈而不是去 logs 目录里翻所以我把 console 模式当成一切配置实验的起点。3. 配置 neo4j.conf 并启动内存、端口、认证与服务化一次说清3.1 必调的五个内存参数堆内存与页缓存的推荐起步值Neo4j 5.x 的 ZIP 包默认配置非常保守因为官方不知道你的机器有多少内存。默认堆内存只有 512M 甚至更小导入稍大一点的 CSV 就会让你误以为程序卡死。所以拿到包之后第一件事就是打开conf\neo4j.conf定位并修改下面这一段。先把整台机器的物理内存除以二作为边界在这个范围内给 JVM 堆和页缓存分配。# 堆内存JVM 管理的内存跑 Cypher、存对象用 server.memory.heap.initial_size512m server.memory.heap.max_size1G # 页缓存Neo4j 自己管理磁盘缓存直接影响图遍历速度 server.memory.pagecache.size512m # 事务日志和数据库文件所在目录默认即可 # server.directories.datadata堆内存的initial_size和max_size我建议直接设为相等比如都是 2G这样 JVM 不用在运行过程中反复扩容收缩减少启动阶段的抖动。页缓存这个参数容易理解错它不是给 JVM 的是 Neo4j 直接通过 OS 文件映射占用的堆外内存所以它和堆内存是一个此消彼长的关系。比如一台 8G 内存的机器堆给 2G页缓存给 1G系统自身再占掉 2G留出 3G 余量给导入时的峰值这样配置比较稳。判断内存配没配上的方法很简单启动日志里会打印Heap Memory: 2.00 GiB和Page Cache: 512.00 MiB如果启动后你用任务管理器看到 java 进程只占了几百 MB说明配置没生效。出现这种情况先去确认你改的是不是正在运行的实例的 conf 文件而不是安装包默认模板详见第五章的排查。3.2 改监听地址localhost、0.0.0.0 和 Windows 防火墙的三方配合Neo4j 5.x 默认只监听localhost这意味着你在本机能访问但局域网里其他机器通过http://你的IP:7474访问时会一直转圈或直接拒绝连接。这是一个非常典型的困惑。要对外提供服务需要把默认监听地址改成0.0.0.0并显式声明 HTTP 和 Bolt 的监听端口# 监听所有网卡地址允许远程通过 IP 访问 server.default_listen_address0.0.0.0 server.http.listen_address:7474 server.bolt.listen_address:7687server.default_listen_address0.0.0.0解决的是 Neo4j 自身只绑定回环地址的问题但只改它还不够。Windows 防火墙默认会拦截从外部发到 7474 和 7687 端口的入站连接。你需要在管理员 PowerShell 里放行这两个端口New-NetFirewallRule -DisplayName Neo4j HTTP -Direction Inbound -Protocol TCP -LocalPort 7474 -Action Allow New-NetFirewallRule -DisplayName Neo4j Bolt -Direction Inbound -Protocol TCP -LocalPort 7687 -Action Allow这里有个容易忽略的细节Bolt 端口是给 Java / Python / .NET 程序连数据库用的如果你的应用部署在另一台机器上只放行 7474 而漏掉 7687就会出现「浏览器能打开管理界面但程序连不上数据库」的诡异现象。验证监听得没生效用这条命令看端口绑定地址netstat -ano | findstr :7474如果最后的地址是0.0.0.0:7474说明监听没问题如果显示127.0.0.1:7474说明配置没被加载或者改完没重启。如果根本查不到端口那就是 Neo4j 还没起来。3.3 认证与首次改密neo4j 默认账号的三种处理方式首次启动后数据库处于认证开启状态默认用户名是neo4j初始密码也是neo4j但 Neo4j 会强制你登录后立刻改密码。这个「强制改密」的逻辑在浏览器里表现为弹窗在 Cypher Shell 里则表现为连接被拒绝。我更推荐在启动之后直接用命令行完成改密省得在浏览器里点来点去# 在 bin 目录下执行会提示输入旧密码和新密码 .\cypher-shell.bat -u neo4j -p neo4j ALTER CURRENT USER SET PASSWORD FROM neo4j TO 你的新密码;如果你希望初始化时就指定密码可以在首次启动之前用管理命令设置注意这条命令只对未初始化或刚删除数据的库生效已经有数据的数据库执行会报错.\bin\neo4j-admin.bat dbms set-initial-password 你的新密码关于认证本身社区版里有很多教程会教你把认证关掉即设置server.security.auth_enabledfalse。我的建议是不要关哪怕在纯内网环境。图数据库的端口一旦对外开放没有认证的库等于把全部业务关系图裸露给内网里任何能访问到这台机器的人。默认密码强度不高的教训我见过不止一次。保留认证只把密码设置得复杂一点成本几乎为零。3.4 前台启动、后台启动与 Windows 服务三种方式的适用场景到这里你已经能分清三种启动方式了。neo4j.bat console是前台模式终端关掉进程就结束适合调试neo4j.bat start是后台守护模式进程脱离终端独立运行适合临时跑一阵install-service是把 Neo4j 注册成 Windows 服务实现开机自启适合正式部署。切换顺序应该是先 console 验证再 start 观察最后装服务。:: 开发调试日志直接打印CtrlC 退出 .\bin\neo4j.bat console :: 后台运行不占用当前终端日志写入 logs\neo4j.log .\bin\neo4j.bat start :: 注册为 Windows 服务需要管理员权限 .\bin\neo4j.bat install-service :: 启动已注册的服务 net start neo4j装服务有一个副作用服务启动时不会像 console 那样把日志直接打给你出错了只能去logs\neo4j.log里翻。所以我见到很多人直接在服务模式下改配置改完发现库没起来又不知道错在哪最后只好把服务卸了再 console 跑一遍。如果你也遇到这种局面先别急着卸载服务执行net stop neo4j后用neo4j.bat console前台跑一次报错信息会直接砸在屏幕上比猜快得多。服务模式下改完配置要重启才生效这条规则对内存参数、监听地址、插件加载全部适用。4. 导入数据与建知识图谱LOAD CSV 和从节点出发的多路径查询4.1 准备 CSV 文件import 目录与 file:/// 路径规则Neo4j 社区版导入数据最正统的姿势是 LOAD CSV它读取的文件默认放在数据目录的import子目录里。如果你解压后没看到import目录自己新建一个即可Neo4j 会自动把它当成导入根目录。这里有个路径规则要记牢文件 URL 是file:///文件名.csv三个斜杠不是 Windows 习惯的盘符写法。绝对路径也可以但要写成file:///C:/neo4j-community-5.26.17/import/people.csv这种格式盘符后面是正斜杠。以构建一张最基础的人物知识图谱为例准备两个 CSV 文件放进 import 目录。第一个是节点文件 people.csv包含姓名和职业字段name,role 张三,工程师 李四,产品经理 王五,设计师第二个是关系文件 relations.csv描述谁认识谁from,to,relation 张三,李四,同事 李四,王五,合作过 张三,王五,朋友这两个文件的结构很简单但涵盖了节点导入和关系导入两种最基本的动作。实际业务里CSV 可能来自业务库导出或爬虫结果字段往往会更多但处理原则不变先把实体拆成节点再把实体间联系拆成关系文件每一行关系记录都用能唯一定位节点的字段去匹配。4.2 用 LOAD CSV 建立节点与关系MERGE 与 CREATE 怎么选在 Neo4j Browser 或 Cypher Shell 里执行下面这条语句。因为 CSV 文件在 import 目录下路径直接写文件名即可。第一次执行建议用 CREATE 验证数据量后续重复执行换 MERGE 防止重复建点// 导入人物节点MERGE 按 name 去重避免重复执行时产生脏数据 LOAD CSV WITH HEADERS FROM file:///people.csv AS row MERGE (p:Person {name: row.name}) SET p.role row.role;逻辑说明LOAD CSV WITH HEADERS会把第一行当表头后面每行数据变成row.name、row.role这样的字段引用。MERGE是「存在则匹配不存在则创建」比CREATE更适合重复执行的导入脚本。如果你确定数据是全新的、只导一次用CREATE更快因为它不需要额外的索引查找。我一般会先用 CREATE 跑通再把它改成 MERGE 配合唯一约束做增量更新。关系导入需要先匹配到两个端点再看关系是否存在。这里用MATCH把 CSV 里每一行的两端都查出来再MERGE关系保证了重复执行不会长出一堆重复边LOAD CSV WITH HEADERS FROM file:///relations.csv AS row MATCH (a:Person {name: row.from}) MATCH (b:Person {name: row.to}) MERGE (a)-[r:RELATES {type: row.relation}]-(b);这段脚本最常见的报错是MATCH没匹配到节点原因是节点还没导入或者名字里的空格没对齐。我的建议是导入关系前先对节点表做一次唯一性检查比如用MATCH (p:Person) RETURN p.name, count(*) ORDER BY count(*) DESC确认没有重复 name 再导关系。大 CSV 文件可以在脚本前面加一行USING PERIODIC COMMIT 5000每 5000 行提交一次事务防止内存被撑爆这个参数按文件大小调整数据量小加不加无所谓。4.3 从指定节点出发查询多条路径三种 CQL 写法数据导进去之后最常被搜的问题就是「从一个节点出发如何查询多条关系」。这里说的「多条」可能是同一个节点的多类关系也可能是沿关系链走多层的路径。核心是记住两类语法可变长度关系和图路径变量。假设你要查张三直接认识的所有人和所有关系类型用这个MATCH (p:Person {name: 张三})-[r]-(other) RETURN type(r) AS relation_type, other.name AS target;type(r)会把每一条关系的类型取出来适合先摸清节点周围有哪些边。但一旦关系链超过一层比如「张三认识的人又认识谁」你需要可变长度关系。-[*1..3]-的意思是沿着方向走 1 到 3 跳路径上的所有节点都算结果MATCH (start:Person {name: 张三}) MATCH path (start)-[*1..3]-(target:Person) RETURN [n IN nodes(path) | n.name] AS path_nodes, length(path) AS depth ORDER BY depth;这段脚本的nodes(path)会把一条路径上的所有节点收集成列表[n IN nodes(path) | n.name]是 Cypher 里的列表推导式把节点对象映射成名字数组。这样查出来的每一行就是一条完整链路的名称序列做知识图谱展示时特别好用。如果你想要的是「张三到王五之间有哪些路径」则用allShortestPaths或shortestPathMATCH (a:Person {name: 张三}), (b:Person {name: 王五}) MATCH p allShortestPaths((a)-[*..6]-(b)) RETURN [n IN nodes(p) | n.name] AS route;如果两种方向都算就不要带-的方向箭头直接(a)-[*..6]-(b)。这里[*..6]的 6 是路径长度上限知识图谱里节点数多时把它设得过大比如 10会指数级增加计算量查询卡住先检查这个上限。4.4 清库重导与增量更新重复导入时的后悔药导数据不可能一次成功尤其是反复调试脚本的阶段。清空库的标准姿势是DETACH DELETE它会先删掉所有关系再删节点避免外键约束报错MATCH (n) DETACH DELETE n;执行完这条图是空的但磁盘空间不会立刻还给操作系统这是 Neo4j 存储引擎的正常表现。清库之后如果立刻重新导入建议先给节点建唯一约束这样 MERGE 的匹配性能会好很多CREATE CONSTRAINT person_name_unique IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;有了这个约束重复执行节点导入脚本时MERGE 会直接用唯一索引去查而不是全表扫描数据量上万时性能差距非常明显。知识图谱的构建过程本质上就是「节点去重、关系幂等、约束兜底」这套组合拳打熟换任何领域数据都能套。5. Neo4j Windows 部署避坑手册5 个高发故障的现象、原因与处理5.1 启动闪退黑匣子一样的黑窗口永远只闪一下现象在 cmd 或 PowerShell 里执行.\bin\neo4j.bat console窗口一闪而过什么都没留下数据库也没起来。这是 Windows 上装 Neo4j 最常见的开箱翻车。原因启动脚本在找到 Java 时已经失败但报错信息被批处理窗口吞掉了。大多数情况是JAVA_HOME指向了 JDK 8 或 11少数情况是JAVA_HOME路径带了引号或结尾带了分号导致脚本拼出来的 java 命令不合法。解决先用java -version确认默认 java 是 17。如果不是回到第二章用setx修正JAVA_HOME然后新开终端再试因为 setx 不更新当前窗口的环境变量。如果 java 版本正确但依然闪退用 cmd 打开一个窗口手动执行%JAVA_HOME%\bin\java -version确认 bin 目录拼写无误。最后再看一眼解压路径任何带空格或中文的路径都会在批处理拼接 classpath 时制造这种闪退。5.2 远程不能通过 IP 访问改完监听地址还是连不上现象本机能访问http://localhost:7474但局域网另一台机器访问http://192.168.x.x:7474一直超时或拒绝。搜「neo4j 不能通过ip访问」能找到一堆类似提问但绝大多数教程只让你改监听地址改完依然不行。原因三层因素叠加。第一层是 Neo4j 默认监听localhost第二层是 Windows 防火墙默认拦截入站 7474 / 7687第三层是很多人改了配置之后没有重启进程以为改了 conf 就立即生效。解决按顺序排查。先改server.default_listen_address0.0.0.0重启服务用netstat -ano | findstr :7474看到0.0.0.0:7474再往下走。然后检查防火墙入站规则放开 7474 和 7687。最后确认本机到服务器的网络通不通ping一下 IP再在远程机器上telnet IP 7474。记住一个原则端口监听是 Neo4j 的事端口可达性是 Windows 防火墙的事链路连通性是网络的事三层分开查才不会被玄学误导。5.3 LOAD CSV 大文件导入内存溢出堆内存被灌爆现象导入几万行的 CSV 时Neo4j 还正常换成几百万行后Browser 里转圈几分钟随后报OutOfMemoryError甚至整个进程被杀掉。原因LOAD CSV 默认把整个事务挂在内存里直到文件读完才提交。如果文件超大且没有用USING PERIODIC COMMIT堆内存会被正在构建的节点和关系对象塞满。另一个原因是机器上堆内存配得太小默认 512M 塞不下大批量写入的中间结构。解决分两步。先在neo4j.conf里把堆内存调到至少 2G页缓存保持 1G 以内。然后在导入脚本最前面加USING PERIODIC COMMIT 5000让数据库每处理 5000 行提交一次内存里的未提交数据量就有上限。如果文件是 10G 级别的超大 CSV我的建议是不要硬啃先按主键拆成多个小文件分多次导入每次导入后观察neo4j.log里的 GC 日志稳定了再导下一批。5.4 改了配置但行为没变内存参数和监听地址像被无视了现象在conf\neo4j.conf里把 heap 和 pagecache 改大启动日志里打印的还是默认值把监听地址改成0.0.0.0netstat 看到的还是127.0.0.1。原因最常见的两种情况。第一种是你把服务模式和 console 模式混用了neo4j.bat start启动的进程可能还在跑你改完配置又用neo4j.bat console想启动第二个实例新实例发现数据目录被占用直接退出而旧实例还在用旧配置。第二种是你改错了 conf 文件。5.x 的 conf 目录里除了neo4j.conf之外可能还有模板文件或者你从网上下的配置文件放在了错误位置Neo4j 压根没读它。解决先执行neo4j.bat stop确保所有实例都停了再确认在neo4j.bat所在的目录执行命令最后neo4j.bat console前台启动看打印的内存数值。如果数值还是旧的直接打开logs\neo4j.log查启动参数里有没有-Xmx这是 JVM 实际使用的堆上限它才是唯一真相。配置文件里的注释符号#也可能坑人改行首必须保证没有多余的空格和残留注释。5.5 端口被占用7474 / 7687 起不来的处理套路现象启动时日志提示端口已在用Neo4j 自动跳过该接口或者直接报BindException。Windows 上经常是旧实例没停干净或者有其他程序占了 7687。原因neo4j.bat start之后如果再执行一次start第二次启动会提示实例已运行但进程未必被杀干净。另外一些监控软件、调试代理也会默认占 7687。解决先用 netstat 找出占用端口的 PIDnetstat -ano | findstr :7687第二列最后一列是 PID然后用tasklist /FI PID eq PID号看是什么进程。如果是 Neo4j 自己的残留 java 进程用taskkill /PID PID号 /F结束它再重新启动。如果是无关程序占用了端口就要么改 Neo4j 端口要么处理那个程序。改端口在 conf 里改server.bolt.listen_address:7690和server.http.listen_address:7475改完记得同步改防火墙规则不然又会回到远程访问不了的老问题。6. 自检与进阶用一条命令确认服务健康再养成两个好习惯6.1 服务健康自检用 cypher-shell 一行命令做体检服务跑起来之后别只靠浏览器打开首页判断。我习惯用一个最小查询确认数据库真正能读能写顺便拿到版本和数据库状态.\bin\cypher-shell.bat -u neo4j -p 你的密码 RETURN version(), db.awaitIndexes(300);这条命令会返回 Neo4j 版本号并等待索引在 300 秒内全部上线。如果返回结果里有版本字符串且没有报异常说明认证、Bolt 连接、索引服务三件事都是通的。再配合netstat -ano | findstr 7474确认监听地址整个实例的健康状态就掌握清楚了。如果你要定期检查可以把这两条命令写进一个.bat脚本用任务计划程序每天跑一次输出重定向到日志比人肉盯浏览器靠谱得多。6.2 备份与配置管理两次小失误换来的习惯进阶阶段我强烈建议养成两个习惯。第一个是改配置前先复制备份copy conf\neo4j.conf conf\neo4j.conf.bak一行命令的后悔药。第二个是定期用管理命令做逻辑备份Neo4j 的neo4j-admin database dump可以把整个库打成一个文件放到其他目录.\bin\neo4j-admin.bat database dump neo4j --to-pathC:\neo4j-backup这条命令要求停止数据库再执行否则备份出的文件可能不完整。恢复时用database load命令顺序是卸下数据库再载入。我自己的惯例是每次改 conf 或导完一批重要数据就做一次 dump文件命名带上日期。这个习惯是从一次改坏监听地址、把整个库卡到起不来之后养成的Windows 上电源不稳、系统更新重启都会让没备份的图库变成不可恢复的黑洞。希望帮到你。本文还有配套的精品资源点击获取