跳到主要内容
Neo4j 图数据库安装与 CQL 语句入门 | 极客日志
Java java
Neo4j 图数据库安装与 CQL 语句入门 综述由AI生成 Neo4j 图数据库的安装方法(Windows 及 Docker),详细讲解了 CQL 核心语句(创建、查询、更新、删除等)、常用函数、数据备份恢复策略以及复杂路径查询。此外,还涵盖了在 Spring Boot 项目中集成 Neo4j 的配置步骤与依赖管理,适合初学者快速上手图数据库开发。
山野诗人 发布于 2026/4/6 更新于 2026/5/23 23 浏览一、Neo4j 安装
1. Windows 安装
(1)准备环境
最新版需要 JDK 17 环境。
(2)下载
下载地址:https://neo4j.com/deployment-center/
社区版免费,支持 Windows、Linux、Mac 等系统。此处使用 Windows 测试。
(3)解压
(4)运行
直接执行 neo4j.bat,会有命令提示。
访问 http://localhost:7474/
首次进入需输入用户名密码 neo4j/neo4j,并设置新密码。
(5)基本使用
2. Docker 安装 docker pull neo4j:3.5.22-community
docker run -d -p 7474:7474 -p 7687:7687 --name neo4j \
-e "NEO4J_AUTH=neo4j/123456" \
-v /usr/local/soft/neo4j/data:/data \
-v /usr/local/soft/neo4j/logs:/logs \
-v /usr/local/soft/neo4j/conf:/var/lib/neo4j/conf \
-v /usr/local/soft/neo4j/import:/var/lib/neo4j/import \
neo4j:3.5.22-community
二、CQL 语句
1. CQL 简介
2. CREATE 命令,创建节点、关系、属性 -- node-name 节点名
-- label-name 标签名
-- Neo4j 服务器使用 <node-name> 存储节点详细信息
-- 建议使用标签名称来访问节点详细信息
CREATE(<node-name>:<label-name>)
-- 创建带有属性的节点
CREATE(<node-name>:<label-name> { <key>:<Value>, ... })
-- 示例
CREATE(stu:Student)
CREATE(tea:Teacher)
CREATE(zhangsan:Student { id:1, name:"zhangsan", age:13 })
3. MATCH 命令,查询 MATCH(<node-name>:<label-name>)
RETURN <node-name>
-- 示例
MATCH(stu:Student) RETURN stu
不配合 RETURN 或 UPDATE 语句会报错。
4. RETURN 语句 RETURN <node-name>.<property1-name>, ..., <node-name>.<propertyn-name>
-- 示例
MATCH(s:Student) RETURN s
MATCH(s:Student) RETURN s.id, s.name, s.age
5. WHERE 子句 WHERE <property-name> <comparison-operator> <value>
-- 条件查询
MATCH(emp:Employee) WHERE emp.name = 'Abc' OR emp.name = 'Xyz' RETURN emp
-- 查询多个,无特定条件可先查询后做关系
MATCH(d:Dog), (c:Cat) WHERE d.name = 'dog1' OR c.name = 'cat1' RETURN d, c
6. 创建关系 -- 创建单向关系
CREATE(node1-name:lable1-name)-[relationship-name:relationship-lable-name]->(node2-name:lable2-name)
-- 创建双向关系
CREATE(node1-name:lable1-name)<-[relationship-name:relationship-lable-name]->(node2-name:lable2-name)
-- 使用已知节点创建带属性的关系
MATCH(<node1-label-name>:<node1-name>), (<node2-label-name>:<node2-name>)
CREATE(<node1-label-name>)-[<relationship-label-name>:<relationship-name> { <define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
-- 检索关系节点的详细信息
MATCH(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
-- 示例
CREATE(d:Dog{ id:1, name:"dog1", age:1 })
CREATE(c:Cat{ id:2, name:"cat1", age:2 })
CREATE(d:Dog)-[r:Like]->(c:Cat)
MATCH(d:Dog), (c:Cat) WHERE d.name = 'dog1' AND c.name = 'cat1'
CREATE(d)-[r:love {info:"loveit"}]->(c)
RETURN r
MATCH(d)-[r:love]->(c) RETURN d, r, c
7. DELETE 删除节点和关系 -- 删除节点
DELETE <node-name-list>
-- 删除关系
DELETE <node1-name>, <node2-name>, <relationship-name>
-- 示例
MATCH(stu: Student) DELETE stu
MATCH(d)-[r:love]->(c) DELETE r
8. REMOVE 删除标签和属性 -- 删除属性
REMOVE <node-name>.<property1-name>, <node-name>.<property2-name>
-- 示例
CREATE(m:Movie:Pic {id:'1', name:"test"})
MATCH(m:Movie:Pic) REMOVE m.name RETURN m
MATCH(m:Movie) REMOVE m:Pic
9. SET 添加、更新属性 -- 节点、关系添加属性
SET <node-label-name>.<property1-name>, ..., <node-label-name>.<propertyn-name>
-- 示例
MATCH(book:Book) SET book.title = 'superstar' RETURN book
10. ORDER BY 排序 -- 默认升序
ORDER BY <property-name-list> [DESC]
-- 示例
MATCH(emp:Employee) RETURN emp.empid, emp.name, emp.salary, emp.deptno ORDER BY emp.name
11. UNION 合并 UNION 子句将两组结果中的公共行组合并返回到一组结果中,不返回重复行。
限制:结果列类型和名称必须匹配。
<MATCH Command1> UNION <MATCH Command2>
-- 示例
MATCH(cc:CreditCard) RETURN cc.id as id, cc.number as number, cc.name as name, cc.valid_from as valid_from, cc.valid_to as valid_to
UNION
MATCH(dc:DebitCard) RETURN dc.id as id, dc.number as number, dc.name as name, dc.valid_from as valid_from, dc.valid_to as valid_to
UNION ALL 结合并返回两个结果集的所有行,包括重复行。
12. LIMIT 和 SKIP 子句 -- 返回前两行
MATCH(emp:Employee) RETURN emp LIMIT 2
-- 跳过两行
MATCH(emp:Employee) RETURN emp SKIP 2
-- 实现分页,跳过 1 行然后返回 2 行
MATCH(emp:Employee) RETURN emp SKIP 1 LIMIT 2
13. MERGE 合并 MERGE 是 CREATE 和 MATCH 的组合。如果模式存在则返回,不存在则创建。
MERGE (<node-name>:<label-name> { <Property1-name>:<Property1-Value>, ... })
14. NULL 值 -- 过滤 null
MATCH(e:Employee) WHERE e.id IS NOT NULL RETURN e.id, e.name, e.sal, e.deptno
MATCH(e:Employee) WHERE e.id IS NULL RETURN e.id, e.name, e.sal, e.deptno
15. IN 操作符 IN [<Collection-of-values>]
-- 示例
MATCH(e:Employee) WHERE e.id IN [123, 124] RETURN e.id, e.name, e.sal, e.deptno
16. INDEX 索引 -- 创建索引
CREATE INDEX ON :<label_name>(<property_name>)
-- 删除索引
DROP INDEX ON :<label_name>(<property_name>)
-- 示例
CREATE INDEX ON :Customer (name)
DROP INDEX ON :Customer (name)
17. UNIQUE 唯一约束 -- 语法
CREATE CONSTRAINT ON (<label_name>) ASSERT <property_name> IS UNIQUE
DROP CONSTRAINT ON (<label_name>) ASSERT <property_name> IS UNIQUE
-- 示例
CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
DROP CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
18. DISTINCT 去重 -- 示例
MATCH(n) RETURN DISTINCT n.name LIMIT 25
三、函数
1. 字符串函数 -- 字符串转大写
MATCH(e:Employee) RETURN e.id, UPPER(e.name), e.sal, e.deptno
-- 字符串转小写
MATCH(e:Employee) RETURN e.id, LOWER(e.name), e.sal, e.deptno
-- 分隔字符串
MATCH(e:Employee) RETURN e.id, SUBSTRING(e.name, 0, 2), e.sal, e.deptno
-- 替换字符
MATCH(e:Employee) RETURN e.id, REPLACE(e.name, 'a', 'z'), e.sal, e.deptno
2. AGGREGATION 聚合
3. 关系函数
四、数据备份与恢复
1. 备份
./neo4j stop
./neo4j-admin dump --database=graph.db --to=/home/2024.dump
./neo4j start
2. 数据恢复
./neo4j stop
./neo4j-admin load --from=/home/2024-10-02.dump --database=graph.db --force
./neo4j start
五、复杂查询
1. 查询指定深度的间接关系 MATCH(p1:Person {name: 'Alice'})-[*..3]-(p2:Person)
WHERE p1 <> p2
RETURN p1, p2
2. 查询最短路径的间接关系 MATCH(p1:Person {name: 'Alice'}), (p2:Person {name: 'Bob'})
MATCH path = shortestPath((p1)-[*]-(p2))
RETURN path
3. 查询特定关系类型的间接关系 MATCH(p1:Person {name: 'Alice'})-[r:FRIEND_OF*..3]-(p2:Person)
WHERE p1 <> p2
RETURN p1, p2, r
4. 限制关系路径中的节点类型 MATCH(p1:Person {name: 'Alice'})-[*..3]-(p2:Person)
WHERE p1 <> p2 AND ALL(n IN nodes(path) WHERE n:Person)
RETURN p1, p2
5. 使用变量长度路径和过滤条件 MATCH(p1:Person {name: 'Alice'})-[*..3]-(p2:Person)
WHERE p1 <> p2 AND ANY(n IN nodes(path) WHERE n.age > 30)
RETURN p1, p2
六、Spring Boot 集成 Neo4j
1. 添加依赖 <dependency >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-starter-data-neo4j</artifactId >
</dependency >
2. 配置文件 # neo4j 配置
spring.neo4j.uri=bolt://localhost:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=cxf123!!
附录:neo4j.conf 汉化版 # 如果想自定义 neo4j 数据库数据的存储路径,要同时修改 dbms.active_database 和 dbms.directories.data 两项配置
#dbms.active_database=graph.db
#dbms.directories.data=data
#dbms.directories.plugins=plugins
#dbms.directories.certificates=certificates
#dbms.directories.logs=logs
#dbms.directories.lib=lib
#dbms.directories.run=run
#此设置将所有'LOAD CSV'导入文件限制在 import 目录下
#dbms.security.auth_enabled=false
dbms.allow_format_migration=true
#dbms.memory.heap.initial_size=512m
#dbms.memory.heap.max_size=512m
#dbms.memory.pagecache.size=10g
#Network connector configuration
dbms.connectors.default_listen_address=0.0.0.0
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473
#Logging configuration
dbms.logs.http.enabled=true
dbms.logs.http.rotation.size=20m
#dbms.logs.gc.enabled=true
#Miscellaneous configuration
cypher.default_language_version=3.0
dbms.security.allow_csv_import_from_file_urls=true
dbms.tx_log.rotation.retention_policy=7 days
dbms.shell.enabled=true
dbms.shell.host=127.0.0.1
dbms.shell.port=1337
#dbms.read_only=false
#dbms.unmanaged_extension_classes=
#JVM Parameters
dbms.jvm.additional=-XX:+UseG1GC
dbms.jvm.additional=-XX:-OmitStackTraceInFastThrow
dbms.jvm.additional=-XX:+AlwaysPreTouch
dbms.jvm.additional=-XX:+UnlockExperimentalVMOptions
dbms.jvm.additional=-XX:+TrustFinalNonStaticFields
dbms.jvm.additional=-XX:+DisableExplicitGC
dbms.jvm.additional=-Djdk.tls.ephemeralDHKeySize=2048
dbms.windows_service_name=neo4j
dbms.jvm.additional=-Dunsupported.dbms.udc.source=zip
参考资料 相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online