Neo4j 是一个高性能图数据库管理系统,适用于图存储、数据科学、机器学习、分析和可视化。Neo4j 以节点(nodes)、连接节点的边(edges/relationships)以及节点和边的属性(attributes)来存储数据。
前提条件
在继续之前,请确保满足以下条件:
- 一台至少具有 2 GB 内存的 Debian 12 服务器。
- 一个具有 sudo 管理员权限的非 root 用户。
安装 Java OpenJDK
在安装 Neo4j 图数据库之前,必须在系统中安装 Java,建议使用最新的 Java LTS 版本 —— Java OpenJDK 17。本节将通过 Debian 仓库安装 Java OpenJDK 17。
首先,执行以下命令更新 Debian 软件包索引并获取最新的软件包信息。
sudo apt update

现在执行以下命令安装 Java OpenJDK 17。在 Debian 12 仓库中,default-jdk 包指向 Java OpenJDK 17,这正是 Neo4j 图数据库所需要的。
sudo apt install default-jdk

输入 y 确认安装。
安装 Java 后,使用以下命令验证 Java 版本。你应该能看到系统上已安装 Java OpenJDK 17。
java -version

安装 Neo4j 图数据库
安装 Java 后,就可以开始在 Debian 系统上安装 Neo4j 图数据库了。你将安装基本依赖、设置 Neo4j 仓库、安装 Neo4j 软件包,然后启动并启用 neo4j 服务。
首先运行以下命令在 Debian 服务器上安装基本系统工具。
sudo apt install gnupg2 apt-transport-https wget curl -y

现在执行以下命令添加 Neo4j GPG 密钥和仓库。这样就将 Neo4j 仓库添加到系统中。
wget -q -O- https://debian.neo4j.com/neotechnology.gpg.key | \
gpg --dearmor | sudo tee /usr/share/keyrings/neotechnology.gpg > /dev/null 2>&1
echo "deb [signed-by=/usr/share/keyrings/neotechnology.gpg] https://debian.neo4j.com stable latest" | \
sudo tee /etc/apt/sources.list.d/neo4j.list

接下来刷新 Debian 软件包索引并执行以下 apt 命令安装 Neo4j 软件包。
sudo apt update && sudo apt install neo4j

输入 y 确认安装。
安装 Neo4j 软件包后,执行以下 systemctl 命令启动并启用 neo4j 服务。
sudo systemctl start neo4j
sudo systemctl enable neo4j
最后使用以下命令验证 neo4j 服务状态,确保服务正在运行。
sudo systemctl status neo4j
如果 Neo4j 图数据库正在运行,屏幕上会显示 active (running) 输出,如下所示。

Neo4j 基本配置
现在已经安装了 Neo4j 图数据库,下一步是配置 Neo4j 管理员密码。通过 neo4j-admin 命令行工具设置密码,然后修改默认配置文件 /etc/neo4j/neo4j.conf 来设置监听地址和最大堆内存。
运行以下 neo4j-admin 命令为 Neo4j 安装设置默认密码。在此示例中,将 Neo4j 默认密码设置为 p4ssword。
neo4j-admin dbms set-initial-password p4ssword
配置好 Neo4j 默认密码后,使用以下 nano 编辑器命令打开 Neo4j 配置文件。
sudo nano /etc/neo4j/neo4j.conf
将本地 IP 地址添加到 dbms.default_listen_address 参数,允许 Neo4j 在本地网络上运行。然后修改 server.memory.heap.max_size 参数为 Neo4j 图数据库设置最大堆内存。在本例中,Neo4j 将运行在 192.168.5.15,最大堆内存为 4 GB。
dbms.default_listen_address=192.168.5.15 server.memory.heap.initial_size=512m server.memory.heap.max_size=4096m
完成后保存文件并退出编辑器。
最后运行以下 systemctl 命令重启 neo4j 服务以应用更改。
sudo systemctl restart neo4j

通过 Cypher-shell 连接 Neo4j
要连接到 Neo4j 图数据库,使用 cypher-shell 工具。cypher-shell 的功能类似于 MySQL/MariaDB 的 mysql 客户端和 PostgreSQL 的 psql。cypher-shell 允许你运行 Cypher 查询,这是一种用于 Neo4j 图数据库的声明式查询语言。
执行以下 cypher-shell 命令登录 Neo4j 图数据库。当提示输入用户名时,输入默认用户 neo4j,然后输入你的密码。
cypher-shell -a 'neo4j://192.168.5.15:7687'

连接成功后,会显示消息"Connected to Neo4j ... as user neo4j",提示符变为 neo4j@neo4j>。
现在运行以下 Cypher 查询 :help 显示帮助信息,运行 :exit 退出 cypher-shell。注意,Cypher 查询总是以分号开头。
:help :exit

此外,可以使用附加选项 -a 连接到特定的 Neo4j 服务器,或使用 -u 以指定用户身份登录。
cypher-shell -a 'neo4j://192.168.5.15:7687' -u neo4j -p p4ssword
Neo4j 图数据库基本操作
在 Neo4j 图数据库中,有 3 个核心实体:
1. 节点(Nodes):Neo4j 图数据库的数据实体,在 Cypher 查询语言中使用圆括号 () 表示。
2. 关系(Relationships):当两个节点相互连接时,称为关系。关系用箭头 -> 表示,指示节点之间的方向。
3. 路径(Paths):由连接的节点和关系组成。
首先运行以下查询创建一个标签为 Movie 的新节点。
CREATE (a:Movie {title:'The Matrix', released: 1999}) RETURN a;

现在运行以下查询创建多个具有相同标签 Person 的节点。
CREATE (a:Person {name:'Keanu Reeves', born: 1964}) RETURN a;
CREATE (a:Person {name:'Carrie-Anne Moss', born: 1967}) RETURN a;
CREATE (a:Person {name:'Laurence Fishburne', born: 1961}) RETURN a;

接下来运行以下查询在 Person 标签节点和 Movie 标签节点之间创建新关系。在此例中,关系将命名为 ACTED_IN 并带有 roles 属性。
MATCH (a:Person), (b:Movie) WHERE (a.name = 'Keanu Reeves') AND b.title = 'The Matrix' CREATE (a)-[r:ACTED_IN {roles:['Neo']}]->(b);
MATCH (a:Person), (b:Movie) WHERE (a.name = 'Carrie-Anne Moss') AND b.title = 'The Matrix' CREATE (a)-[r:ACTED_IN {roles:['Trinity']}]->(b);
MATCH (a:Person), (b:Movie) WHERE (a.name = 'Laurence Fishburne') AND b.title = 'The Matrix' CREATE (a)-[r:ACTED_IN {roles:['Morpheus']}]->(b);

最后运行以下查询检查 Neo4j 图数据库中可用的节点和关系。
MATCH (s)-[r]->(e) RETURN s.name AS Name, e.title AS Title, r.roles AS As;
以下输出确认每个节点已成功连接。

总结
通过本教程,你已经成功在 Debian 12 服务器上逐步安装了 Neo4j 图数据库。你完成了 Neo4j 图数据库的安装和配置,学习了使用 Cypher-shell 连接 Neo4j 的方法,以及使用 Cypher 查询语言进行基本图数据库操作。