
简介Neo4j 5.26.17 社区版 Windows 发行包面向需要在本地或服务器上部署图数据库的开发者、运维人员与数据科学家。该版本为当前稳定版要求 JDK 17 及以上运行环境自带 Neo4j Browser 2025.8.0并提供 cypher-shell、neo4j-admin 等命令行工具可避开官网下载受限或网络不稳定的困扰适用场景包括知识图谱构建、推荐系统、社交网络分析与实时风控中的关系推理等。压缩包共 251 个文件约 116.87MB其中 224 个 jar 文件构成核心运行库另有 bat/ps1 脚本负责服务启停与配置管理conf 文件用于调整内存、缓存、连接数等数据库参数exe 组件可将 Neo4j 注册为 Windows 服务以实现开机自启并附带证书与许可证材料。借助 neo4j-admin 可完成备份恢复、用户管理和集群配置借助 cypher-shell 可批量执行 Cypher 查询结合启动脚本与配置模板读者能快速完成从环境初始化到生产部署的完整链路同时官方目录结构也便于后续升级与维护。已有 187 人学习/下载适合希望获得开箱即用的稳定发行包并投入实际图数据项目的读者。1. Neo4j 5.26.17 Windows zip 包免安装、要配 JDK、先想清楚用它搭什么拿到 neo4j-community-5.26.17-windows.zip 这个压缩包相当于拿到了一个解压就能跑的图数据库引擎。Neo4j 社区版免费去掉的是集群、热备份、监控这类企业功能单机开发、知识图谱原型、毕业设计、公司内部关系分析完全够用。zip 包相比 exe 安装器的好处是绿色、干净多个版本可以共存想换版本直接删目录就行不像安装版还要走卸载流程。适合两类人一类是刚接触图数据库、想从零搭知识图谱的新手另一类是已经在用 4.x、想升到 5.x 看 Cypher 和配置变化的熟手。需要特别提醒Neo4j 5.x 强制要求 JDK 17装之前先确认本机 java 版本这一步省不得后面有一整节讲这个坑。2. 解压与首次启动从 zip 到浏览器里看到 Neo4j Browser这一段就当 Neo4j 的菜鸟教程看跟着命令走一遍十分钟内能把 Browser 拉起来。环境是 Windows 10/11如果是 Windows Server 也适用命令没有差别。2.1 先认清目录结构bin、conf、data、logs 各管什么解压后先别急着点启动脚本花两分钟看一眼目录结构。Neo4j 的 zip 包没有注册表、没有服务依赖所有东西都在这个目录里所以找问题也都在这个目录里找。目录作用需要关心的文件bin所有启动和管理命令的入口neo4j.bat、neo4j-admin.batconf配置文件目录改配置基本都在这里neo4j.confdata图数据库实际落盘的位置databases/、transactions/logs运行日志排查问题的第一现场neo4j.log、debug.log、query.logplugins第三方插件比如 APOC 的 jar 包手动放入后重启生效importLOAD CSV 的默认读取根目录导入用的 CSV 放这里这里最容易踩的坑是新手不知道 import 目录的存在直接把 CSV 放在桌面或解压根目录然后 LOAD CSV 一直报文件找不到。记住一个原则CSV 进 import日志出问题先看 logs。2.2 JDK 17 是硬门槛版本不对连启动都要翻车Neo4j 5.x 要求 JDK 17注意不是 JDK 8、不是 JDK 11低版本直接没法跑。先验证本机 Java 环境java -version输出应该是类似openjdk 17.0.x或java version 17.x这样的结果。如果看到1.8.0_xxx说明本机是 JDK 8如果是 JDK 11 也扛不住都需要换 JDK 17。这里说的“换”不是卸载旧的而是把 JAVA_HOME 指到 JDK 17 的安装目录。:: 设置当前会话的环境变量临时生效 set JAVA_HOMEC:\Program Files\Java\jdk-17 set PATH%JAVA_HOME%\bin;%PATH% java -version逻辑说明Neo4j 启动时通过 JAVA_HOME 找 JVM如果这个变量指向旧版本即使 PATH 里有新 java 也会在启动时出问题。上面第一行把 JAVA_HOME 指到 JDK 17 安装路径第二行把 JDK 的 bin 目录放进 PATH让java -version用的就是刚指定的这个版本。第三行是验证必须显示 17 开头才继续下一步。参数说明jdk-17是安装目录名实际路径取决于你装的版本和位置用的时候替换成自己的。如果系统环境变量和用户环境变量里都有 JAVA_HOME建议统一改成 JDK 17否则换一个终端窗口可能又变成旧版本这是 Windows 上最常见的“明明改了却还是报错”的原因。2.3 首次启动console 前台模式与密码初始化JDK 确认无误后进入 bin 目录启动cd E:\neo4j-community-5.26.17\bin neo4j.bat console逻辑说明console是前台运行模式启动日志直接打在当前窗口CtrlC 可以停止适合第一次跑或排错时用。日志滚动到最后出现Started.字样表示启动成功。如果这里报错直接看当前窗口的红色报错比去翻日志文件更直观。参数说明neo4j.bat子命令有console、start、stop、status、restart还有install-service。日常开发阶段用console就够了要长期跑、开机自启用install-service把 Neo4j 注册成 Windows 服务之后用neo4j.bat start/stop控制。注意 Windows 服务模式下日志只进文件不进窗口出了问题就去 logs 目录找。启动成功后浏览器访问 http://localhost:7474 首次登录账号是neo4j初始密码也是neo4j登录后系统强制要求改密码。这一步不能跳过改完的密码保存在本地后面所有工具连接都用它。3. 配置与调优内存不生效、远程访问被拒都在 conf 里解决Neo4j 能用默认配置跑起来但默认配置是为“能启动”设计的不是为“跑你的数据”设计的。真实场景中不加配置就上大数据量基本会撞上两个问题内存不够导致导入失败、局域网访问被拒。这两个问题都能在 conf/neo4j.conf 里解决。3.1 5.x 配置前缀变了server.* 代替 dbms.*网上搜 Neo4j 教程大量结果是 4.x 甚至 3.x 的配置项前缀还是dbms.memory.heap.max_size。5.x 统一改成了server.memory.heap.max_size最坑的是写错前缀不会报错只是不生效你盯着配置文件以为配了 4G实际 JVM 还是 512M 在跑。配置项默认值说明server.port7474HTTP 端口浏览器访问用server.bolt.port7687Bolt 二进制协议端口Java/Python 驱动连这个server.default_listen_addresslocalhost监听地址改成 0.0.0.0 才能允许非本机访问server.memory.heap.initial_size512mJVM 堆初始大小server.memory.heap.max_size512mJVM 堆最大大小server.memory.pagecache.size512m页缓存缓存磁盘上的节点和关系数据server.memory.off_heap.max_size512m事务状态堆外内存server.security.auth_enabledtrue认证开关改成 false 会关掉登录server.directories.importimportLOAD CSV 读取的根目录看到dbms.开头的教程可以直接关掉或者只参考思路、把前缀换成server.再抄。我一般写完配置后会顺手用 CtrlF 搜一下dbms.确保没有漏网的旧前缀。3.2 内存参数heap 给查询引擎pagecache 给磁盘缓存heap 是 JVM 堆内存负责 Cypher 查询执行、结果集排序、事务交互pagecache 是 Neo4j 自己管理的页缓存负责把磁盘上的节点、关系、索引缓存到内存里减少磁盘 IO。两者的分工完全不同只调一个往往不够。# conf/neo4j.conf server.memory.heap.initial_size2G server.memory.heap.max_size4G server.memory.pagecache.size8G server.memory.off_heap.max_size1G逻辑说明这是一个 32G 物理内存机器的保守配置。heap 初始 2G、最大 4G给查询引擎留足处理空间pagecache 给 8G缓存热数据off_heap 是事务处理时的堆外内存给 1G 够用。启动时 Neo4j 会按这个配置申请内存而不是等到用满了才扩容。参数说明heap 最大值不要超过物理内存的 25%否则 GC 压力大pagecache 可以给到物理内存的 50%但前提是这台机器只跑 Neo4j。如果是开发机还要留内存给 IDE 和浏览器。改完配置必须重启才生效console模式按 CtrlC 停掉再重新启动。另外提一个冷门但实用的点Windows 上如果开启了 Windows 服务模式改完 conf 后必须neo4j.bat restart单独start是起不动已运行实例的。3.3 远程访问listen_address、advertised_address 和防火墙默认配置下 Neo4j 只监听 localhost意味着只有本机能访问。要让局域网其他机器连接改一行配置server.default_listen_address0.0.0.0 # 如果浏览器访问地址需要对外广播加上下面这行 server.advertised_address192.168.1.100逻辑说明server.default_listen_address控制监听所有网卡改成0.0.0.0后任何 IP 都能通过 7474 和 7687 端口访问。server.advertised_address是告诉客户端连接时用哪个地址如果服务器有固定内网 IP写具体 IP 更稳拿不准就保持默认。改完配置后Windows 防火墙要放行两个端口。打开控制面板 → 系统和安全 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则选端口填7474,7687允许连接。很多人在这一步翻车配置改了、服务重启了、本机能访问但局域网还是连不上十有八九是防火墙没放行。验证方式是在另一台机器上浏览器访问http://服务器IP:7474能出登录页就说明通了。4. 数据导入从 CSV 到知识图谱的三条路社区版最常见的用途就是拿 CSV 建知识图谱。数据导入有三条路小数据量用 LOAD CSV、大数据量用 neo4j-admin import、持续增量用 LOAD CSV MERGE 组合。选哪条路取决于数据规模和是否需要停库。4.1 建模先行先画节点和关系再谈导入拿到 CSV 后第一件事不是写导入语句而是画图。先回答三个问题哪些列是实体实体之间什么关系关系有没有属性举个例子文件内容建模persons.csv人员信息id、name、cityPerson 节点movies.csv电影信息id、title、yearMovie 节点acted_in.csv演员参演关系personId、movieId、roleACTED_IN 关系role 是关系属性把数据分成节点文件和关系文件是最清晰的做法。如果只有一张表每行代表一个实体表和表之间的外键就是关系。建模阶段不花时间后面导入大概率返工。4.2 全量导入用 neo4j-admin import快但要停库如果数据量在几十万行以上LOAD CSV 会慢到怀疑人生这时候用官方的高性能导入工具。它直接绕过 Cypher 层写数据文件速度能快一个数量级代价是导入期间数据库必须停止。:: 先停止服务 bin\neo4j.bat stop :: 全量导入节点文件 关系文件 bin\neo4j-admin database import full ^ --nodesimport\persons.csv ^ --nodesimport\movies.csv ^ --relationshipsimport\acted_in.csv ^ --databaseneo4j逻辑说明第一行停服务是必须的import 工具要求数据库处于关闭状态否则文件占用会直接报错。第二行开始的命令--nodes可以写多次每个参数对应一个节点文件--relationships对应关系文件--database指定写入哪个库默认就是 neo4j。Windows 命令行用^做换行符注意^前面有空格。参数说明CSV 文件头部需要特殊格式。persons.csv 的第一行要写成id:ID(Person),name,city其中:ID(Person)标记这是 Person 节点的 ID 列acted_in.csv 的第一行要写成:START_ID(Person),:END_ID(Movie),role:START_ID和:END_ID告诉工具关系两端的节点类型。文件必须放在 import 目录下否则找不到路径。导入完成后用neo4j.bat start重启Browser 里就能查了。4.3 增量导入用 LOAD CSV不停库也能跑日常加数据、更新数据用 LOAD CSV 最顺手。它本质是一个 Cypher 命令可以在数据库运行状态下执行从 import 目录读 CSV逐行执行后面的语句。LOAD CSV WITH HEADERS FROM file:///persons.csv AS row MERGE (p:Person {personId: row.id}) SET p.name row.name, p.city row.city;逻辑说明LOAD CSV WITH HEADERS把第一行当作字段名row.id就是取这一行的 id 列。MERGE是“存在就匹配不存在就创建”配合唯一约束可以保证重复执行不会产生重复节点。SET更新或补充属性。如果改用CREATE每次执行都会无脑插入新节点跑两遍就出现重复数据。参数说明file:///persons.csv是相对于 import 目录的路径文件放在import/persons.csv才写file:///persons.csv。路径写错是最常见的报错来源。建议先建唯一约束再跑 MERGECREATE CONSTRAINT person_id IF NOT EXISTS FOR (p:Person) REQUIRE p.personId IS UNIQUE;逻辑说明这一行给 Person 节点的 personId 属性建唯一约束约束建立后 MERGE 才能高效匹配已有节点避免每次做全表扫描。没有约束时 MERGE 在大表上会非常慢这是很多人说“LOAD CSV 越跑越慢”的根本原因。4.4 从关系三元组到图知识图谱的映射套路很多知识图谱数据是三元组格式head、relation、tail每一行都是一个“实体-关系-实体”。这种数据映射到图上就是两个节点中间一条关系。headrelationtail张三工作于某某科技张三毕业于某大学某大学位于某城市LOAD CSV WITH HEADERS FROM file:///triples.csv AS row MERGE (h:Entity {id: row.head}) MERGE (t:Entity {id: row.tail}) MERGE (h)-[r:RELATION {type: row.relation}]-(t) RETURN count(r);逻辑说明前两个 MERGE 保证头实体和尾实体存在第三个 MERGE 创建关系关系类型固定为RELATION真正的语义工作于、毕业于存在关系的 type 属性里。注意Cypher 的关系类型是写死的不能直接用变量代替所以语法上是MERGE (h)-[r:RELATION]-(t)而不是MERGE (h)-[r:row.relation]-(t)这是新手最容易想当然写错的地方。如果装了 APOC 插件可以用apoc.merge.relationship(h, row.relation, {}, {}, t, {})动态创建关系类型查询时可以按关系类型过滤。没装 APOC 就按上面固定类型 属性区分的方式绝大多数场景够用。5. 常见问题排查启动闪退、内存没生效、IP 访问不了这一章全是血泪经验。Neo4j 在 Windows 上最常翻车的几个点基本集中在这五条里按“现象 → 原因 → 解决”的格式一条条说。5.1 启动闪退日志提示不支持的 Java 版本现象双击neo4j.bat console窗口一闪而过或者命令行下报错Unsupported Java version/Unable to find any JVMs。原因本机默认 Java 是 8 或 11Neo4j 5.x 只认 17或者 JAVA_HOME 指向了错误的 JDK 路径。解决先java -version确认当前版本再确认 JAVA_HOME。如果指向了 JDK 8重新下载 JDK 17 安装然后在系统环境变量里把 JAVA_HOME 改成新路径。改完重新开一个命令行窗口再启动注意是“重新开”同一个窗口的环境变量不会刷新。5.2 配置了内存却不生效运行中还是 512m现象conf 里写了server.memory.heap.max_size4G但启动后内存占用始终是几百兆或者用监控工具看 JVM 堆还是默认值。原因三种情况最常见。一是照抄了 4.x 教程写成dbms.memory.heap.max_size5.x 不识别这个前缀静默忽略二是改了文件但启动的是另一个路径下的 Neo4j三是 Windows 服务模式下改完配置没有 restart旧进程还在跑。解决用 JDK 自带的工具直接查运行中的 JVMjps -l jinfo -flag MaxHeapSize pid逻辑说明jps -l列出所有 Java 进程找到 Neo4j 的 pidjinfo -flag MaxHeapSize打印这个进程实际生效的堆最大值单位是字节。如果显示 536870912512M说明配置没生效。回到 conf 检查前缀是不是server.memory.heap.max_size然后重启服务。这个“查生效值而不是看配置文件”的习惯能省下大量自我怀疑的时间。5.3 局域网 IP 访问被拒本机能进、别人进不来现象本机访问localhost:7474正常局域网另一台机器访问http://192.168.x.x:7474超时或拒绝连接。原因两层原因叠加。第一层是server.default_listen_address还是默认的 localhost服务只监听回环地址第二层是 Windows 防火墙没有放行 7474 和 7687 端口。解决先改 conf 里的监听地址为0.0.0.0并重启再查防火墙netstat -ano | findstr 7474逻辑说明netstat看 7474 端口监听地址如果是127.0.0.1:7474说明监听没放开改成0.0.0.0:7474或:::7474才说明服务侧正常。然后去防火墙放行端口。还有一个隐蔽坑如果机器上装过其他版本的 Neo4j旧服务可能占着 7474新实例起不来这时候 netstat 里的 PID 能帮你找到占用进程去任务管理器结束它。5.4 LOAD CSV 报错文件找不到、中文乱码现象执行LOAD CSV FROM file:///xxx.csv报错Couldnt load the following external resource或者中文属性全部变成乱码。原因文件没放在 import 目录下CSV 是 GBK 编码文件头带 BOM。解决文件放进import目录再执行。编码问题用记事本打开 CSV另存为时选择“UTF-8 编码”不要选 ANSI。BOM 问题在文件开头有三个不可见字符EF BB BF会干扰第一列字段名用 VS Code 打开后右下角确认编码是 “UTF-8 with BOM” 还是 “UTF-8”后者才正常。这几种问题在 Windows 上交替出现每次导入前检查一遍“目录、编码、BOM”三件套能省一大半排错时间。5.5 跑着跑着报内存不足连接全被拒现象大查询或连续导入时日志里出现OutOfMemoryError随后客户端连接报Connection refused。原因pagecache 或 heap 配置过大给操作系统留的余量不足触发系统级内存压力或者频繁执行超大查询把堆打爆。解决把 pagecache 调小到物理内存的 1/3 左右heap 保持在 1/4 左右给 OS 和其他进程留出空间。如果是查询本身的问题看 logs/query.log 里记录的执行时间找到慢查询加上索引。临时救急可以先重启但重启只是后悔药不调整配置还会再犯。6. 从一组节点出发的多跳查询Cypher 模式匹配与 PROFILE 验证图数据库最大的价值就是多跳查询这也是搜索里“从一个节点出发查多条”真正的需求点。搭好知识图谱后核心查询就是把某个实体作为起点沿着关系向外扩展若干层。MATCH (start:Person {name: 张三})-[:FRIEND*1..3]-(target:Person) RETURN DISTINCT target.name AS name, target.city AS city ORDER BY name;逻辑说明[:FRIEND*1..3]是变长关系模式1..3表示从 1 跳到 3 跳FRIEND是关系类型。这条查询找出张三直接认识、朋友的朋友、最多三跳以内的所有人DISTINCT去重因为同一人可能通过多条路径到达。把Person和FRIEND换成你自己的节点标签和关系类型就是通用的多跳查询模板。多跳查询在数据量大时最容易变慢验证执行计划是必做动作PROFILE MATCH (start:Person {name: 张三})-[:FRIEND*1..3]-(target:Person) RETURN DISTINCT target.name;看输出里的执行计划如果第一步出现NodeIndexSeek说明命中了 Person.name 上的索引如果出现AllNodesScan说明在做全表扫描数据量一大就卡死。之前我在百万节点的库上跑五跳查询白屏了几分钟后来才意识到是忘了给起点属性建索引。从那以后我每次写 Cypher 之前都强制先跑一遍 PROFILE确认执行计划里是索引扫描而不是全量扫描才放行。如果手头还没有这份 neo4j-community-5.26.17-windows.zip下载解压后从第 2 章的命令开始跑一遍配好 JDK、导入自己的 CSV、再验证一次多跳查询这套流程走完图数据库的日常操作就门清了。希望帮到你。本文还有配套的精品资源点击获取