Mac 终端导入大型 .cypher 文件到 Neo4j 数据库教程
适用场景
当 .cypher 文件比较大,比如几十 MB,不要直接复制粘贴到 Neo4j Query 页面,容易卡死。
正确做法是:用 Mac 终端里的 cypher-shell 执行整个文件。
例如:workspace_code_graph.cypher
文件在:~/Downloads/workspace_code_graph.cyphe
要导入到 Neo4j 数据库:demo1
一、确认 Neo4j 正在运行
打开 Neo4j Desktop Studio(桌面应用),确认你的实例状态是:RUNNING
例如实例名是:codegraph
并且已经创建好目标数据库,比如:demo1
二、确认大文件在 Mac 下载目录
在 Mac 终端输入:
ls -lh "$HOME/Downloads/workspace_code_graph.cypher"
如果能看到类似:57M /Users/liqianqian/Downloads/workspace_code_graph.cypher
说明文件位置正确。
三、设置 Neo4j 自带的 Java
因为 cypher-shell 需要 Java,有时候 Mac 终端找不到 Java。可以直接使用 Neo4j Desktop 自带的 Java。
在终端执行:
JAVA_BIN=$(find "$HOME/Library/Application Support/neo4j-desktop" -type f -path "*/bin/java" 2>/dev/null | head -n 1)
export JAVA_HOME="$(dirname "$(dirname "$JAVA_BIN")")"
export PATH="$JAVA_HOME/bin:$PATH"
检查 Java 是否可用:
java -version
如果显示类似:openjdk version "21..."
说明成功。
四、找到 cypher-shell
继续在终端执行:
CYPHER_SHELL=$(find "$HOME/Library/Application Support/neo4j-desktop/Application/Data/dbmss" -type f -name "cypher-shell" 2>/dev/null | head -n 1)
检查是否找到:
"$CYPHER_SHELL" --version
如果显示类似:Cypher-Shell 2026.05.0
说明成功。
注意:每次新开一个终端窗口,都需要重新执行第三步和第四步。
五、清空目标数据库,避免和旧数据混在一起
如果目标数据库之前已经有数据,建议先清空。
进入 Neo4j Studio 左侧 Query 页面,顶部数据库选择:demo1
然后执行:
MATCH (n)
DETACH DELETE n;
检查是否清空成功:
MATCH (n)
RETURN count(n) AS nodeCount;
结果应该是:0
再检查关系:
MATCH ()-[r]->()
RETURN count(r) AS relationshipCount;
结果也应该是:0
六、正式导入大文件
回到 Mac 终端,执行:
"$CYPHER_SHELL" \
-a bolt://127.0.0.1:7687 \
-u neo4j \
-d demo1 \
-f "$HOME/Downloads/workspace_code_graph.cypher"
含义解释:
-a bolt://127.0.0.1:7687 连接本机 Neo4j
-u neo4j 使用 neo4j 用户
-d demo1 导入到 demo1 数据库
-f workspace_code_graph.cypher 执行这个 cypher 文件
执行后会提示:
password:
输入 Neo4j 密码。
密码输入时不会显示任何字符,输完按回车即可。
七、等待导入完成
大文件导入可能需要几分钟甚至更久。
导入过程中:
不要关闭终端
不要重复执行命令
不要以为没输出就是卡死
直到终端重新出现普通提示符,例如:
liqianqian@lqqMacBook-Air ~ %
才说明导入结束。
八、检查导入结果
回到 Neo4j Studio 的 Query 页面,顶部数据库选择:demo1
检查节点数量:
MATCH (n)
RETURN count(n) AS nodeCount;
检查关系数量:
MATCH ()-[r]->()
RETURN count(r) AS relationshipCount;
如果是完整代码图,数量可能类似:节点:21670 关系:22078
具体以你生成文件时的统计为准。
九、可视化图谱
不要直接执行:
MATCH (n)
RETURN n;
这个会一次性渲染所有节点,很容易卡死。
建议先只显示一小部分:
MATCH p=(a)-[r]->(b)
RETURN p
LIMIT 100;
然后在结果区域选择 Graph 视图。
十、常用展示查询
1. 查看节点类型统计
MATCH (n)
UNWIND labels(n) AS nodeType
RETURN nodeType, count(*) AS count
ORDER BY count DESC;
2. 查看关系类型统计
MATCH ()-[r]->()
RETURN type(r) AS relationType, count(*) AS count
ORDER BY count DESC;
3. 展示局部图
MATCH p=(a)-[r]->(b)
RETURN p
LIMIT 100;
4. 展示接口相关关系
MATCH p=(a:ApiEndpoint)-[r]-(b)
RETURN p
LIMIT 100;
5. 展示函数调用接口关系
MATCH p=(a)-[r:FUNCTION_CONSUMES_API]->(b)
RETURN p
LIMIT 100;
十一、常见问题
1. 需要进入 neo4j@neo4j> 吗?
不需要。
如果使用下面这种命令:
"$CYPHER_SHELL" -d demo1 -f 文件路径
就是直接在 Mac 普通终端执行,不需要进入交互模式。
看到这种提示符就可以执行:
liqianqian@lqqMacBook-Air ~ %
2. .cypher 文件可以拖进 Neo4j Import 吗?
不建议,也通常不适用。
Neo4j 的 Import 页面更适合导入 CSV。.cypher 大文件应该用 cypher-shell -f 导入。
3. 如果导入错数据库怎么办?
先切到错误的数据库,清空:
MATCH (n)
DETACH DELETE n;
然后重新用正确数据库导入:
"$CYPHER_SHELL" \
-a bolt://127.0.0.1:7687 \
-u neo4j \
-d 正确数据库名 \
-f "$HOME/Downloads/文件名.cypher"
十二、最终最常用命令模板
以后只要文件在 Mac 下载目录,直接改数据库名和文件名即可:
JAVA_BIN=$(find "$HOME/Library/Application Support/neo4j-desktop" -type f -path "*/bin/java" 2>/dev/null | head -n 1)
export JAVA_HOME="$(dirname "$(dirname "$JAVA_BIN")")"
export PATH="$JAVA_HOME/bin:$PATH"
CYPHER_SHELL=$(find "$HOME/Library/Application Support/neo4j-desktop/Application/Data/dbmss" -type f -name "cypher-shell" 2>/dev/null | head -n 1)
"$CYPHER_SHELL" \
-a bolt://127.0.0.1:7687 \
-u neo4j \
-d demo1 \
-f "$HOME/Downloads/workspace_code_graph.cypher"
最核心一句就是:
"$CYPHER_SHELL" -a bolt://127.0.0.1:7687 -u neo4j -d demo1 -f "$HOME/Downloads/workspace_code_graph.cypher"更多推荐



所有评论(0)