适用场景

.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"
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐