neo4j图数据库
Neo4j简介
Neo4j是一款基于Java开发的开源NoSQL图数据库,自2003年开始研发,于2007年发布首个版本。目前已被全球数十万家企业和组织广泛采用。
作为专业级图数据库,Neo4j不仅实现了图数据模型的完整存储,还具备企业级数据库特性,包括:
- ACID事务支持
- 集群部署能力
- 备份与故障转移机制
版本说明
- 企业版:需付费授权,提供高可用性和热备份等高级功能
- 社区开源版:免费使用,但仅支持单机运行
Neo4j图数据库核心概念
节点(Node)
- 图数据库中的基本数据单元
- 通过关系与其他节点相连
- 可包含一个或多个属性(键值对)
- 可标记一个或多个标签(Label)
- 类比关系型数据库:节点≈表,标签≈表名,属性≈列
关系(Relationship)
- 连接两个节点的有向边
- 可包含一个或多个属性
属性(Property)
- 命名的键值对
- 支持索引和约束
- 支持创建复合索引
标签(Label)
- 用于节点分类
- 节点可拥有多个标签
- 标签索引可加速节点查找
Neo4j安装指南
安装步骤
- 将Neo4j加入yum源
- 使用yum安装
- 修改配置文件
- 启动服务
详细流程
- 配置yum源
rpm --import http://debian.neo4j.org/neotechnology.gpg.key
vim /etc/yum.repos.d/neo4j.repo
添加以下内容:
[neo4j]
name=Neo4j RPM Repository
baseurl=http://yum.neo4j.org/stable
enabled=1
gpgcheck=1
- 安装Neo4j
yum install neo4j
- 修改配置文件(/etc/neo4j/neo4j.conf)
# 目录配置
dbms.directories.data=/var/lib/neo4j/data
dbms.directories.plugins=/var/lib/neo4j/plugins
dbms.directories.certificates=/var/lib/neo4j/certificates
dbms.directories.logs=/var/log/neo4j
dbms.directories.lib=/usr/share/neo4j/lib
dbms.directories.run=/var/run/neo4j
dbms.directories.import=/var/lib/neo4j/import
# 内存配置
dbms.memory.heap.initial_size=512m
# 网络配置
dbms.connectors.default_listen_address=0.0.0.0
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473
dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=:7687
- 启动服务
neo4j start
成功启动后会显示服务信息:
Active database: graph.db
Directories in use:
home: /var/lib/neo4j
config: /etc/neo4j
logs: /var/log/neo4j
plugins: /var/lib/neo4j/plugins
import: /var/lib/neo4j/import
data: /var/lib/neo4j/data
certificates: /var/lib/neo4j/certificates
run: /var/run/neo4j
Starting Neo4j.
Started neo4j (pid 2463). It is available at http://localhost:7474/
Neo4j管理后台登录
- 访问地址:
http://192.168.88.161:7474 - 连接URL:
bolt://192.168.88.161:7687 - 用户名:
neo4j - 密码:
123456(首次登录默认为neo4j)
Cypher 简介与使用指南
Cypher 是 Neo4j 图数据库的专用查询语言,类似于传统数据库中的 SQL,但专为图数据结构优化设计,能够高效执行图数据的查询和更新操作。
Cypher 基础命令与语法
- CREATE 命令 - 创建节点
- MATCH 命令 - 查询数据
- MERGE 命令 - 匹配或创建节点
- 关系(Relationship)命令 - 处理节点间关系
- WHERE 命令 - 添加查询条件
- DELETE 命令 - 删除节点/关系
- SORT 命令 - 排序结果
- 字符串函数 - 字符串处理
- 聚合函数 - 数据聚合
- 索引(Index)命令 - 创建和管理索引
1. CREATE 命令
用于创建图数据中的节点。
语法格式:
CREATE (node_name:Node_Label {
property1: value1,
property2: value2,
...
})
说明:
CREATE是关键字- 节点名称和标签放在小括号
()内 - 节点属性放在大括号
{}中,采用属性名:值的形式,多个属性用逗号分隔
示例:
CREATE (e:Employee {
id: 222,
name: 'Bob',
salary: 6000,
deptno: 12
})
2. MATCH 命令
用于查询图数据库中的现有数据。
基本语法:
MATCH (node_name:Node_Label)
RETURN property1, property2, ...
说明:
- 节点名称和标签放在小括号内
- 使用
RETURN语句指定要返回的属性
示例:
MATCH (e:Employee)
RETURN e.id, e.name, e.salary, e.deptno
MATCH (n)
RETURN n -- 查询所有节点
3. MERGE 命令
当目标节点存在时,其功能等同于 MATCH 命令;若节点不存在,则等同于 CREATE 命令。
示例:
MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})
再次执行该查询时,数据库中的数据量不会增加,因为已存在相同数据,MERGE 匹配成功。
4. 关系操作命令
使用 CREATE 创建关系
注意事项:
- 必须创建有方向性的关系,否则会报错
示例:
-- 创建从节点 p1 指向 p2 的有向关系,关系标签为 Buy
CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)
使用 MERGE 创建关系
示例:
-- 创建节点 p1 到 p2 的无方向关系,关系标签为 miss
MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)
5. WHERE 命令
用于添加查询条件,类似于 SQL 中的 WHERE 子句。
示例:
-- 查询 Employee 节点中 id 值为 123 的节点
MATCH (e:Employee)
WHERE e.id = 123
RETURN e
6. DELETE 命令
删除节点/关系及其关联的属性。
注意事项:
- 删除节点的同时,也要删除关联的关系边
示例:
MATCH (p1:Profile1)-[r]-(p2:Profile2)
DELETE p1, r, p2
7. sort
在Cypher查询语言中,排序操作使用ORDER BY子句实现。
升序排列示例
MATCH (e:Employee)
RETURN e.id, e.name, e.salary, e.deptno
ORDER BY e.id
降序排列示例
MATCH (e:Employee)
RETURN e.id, e.name, e.salary, e.deptno
ORDER BY e.salary DESC
字符串函数
toUpper() 函数
将输入字符串转换为大写字母。
示例:
MATCH (e:Employee)
RETURN e.id, toUpper(e.name), e.salary, e.deptno
toLower() 函数
将输入字符串转换为小写字母。
示例:
MATCH (e:Employee)
RETURN e.id, toLower(e.name), e.salary, e.deptno
substring() 函数
提取子字符串,从 start_index 开始到 end_index-1 结束。
语法:
substring(input_str, start_index, end_index)
示例(返回员工名字的前两个字母):
MATCH (e:Employee)
RETURN e.id, substring(e.name, 0, 2), e.salary, e.deptno
replace() 函数
替换字符串中的指定部分。
语法:
replace(input_str, origin_str, new_str)
示例(为员工名字添加后缀):
MATCH (e:Employee)
RETURN e.id, replace(e.name, e.name, e.name + "_HelloWorld"), e.salary, e.deptno
示例(还原操作):
MATCH (e:Employee)
RETURN e.id, replace(e.name, "_HelloWorld", ""), e.salary, e.deptno
聚合函数
count() 函数
统计匹配的记录数量。
示例(统计员工总数):
MATCH (e:Employee)
RETURN count(*)
max() 函数
返回匹配记录中的最大值。
示例(查询最高工资):
MATCH (e:Employee)
RETURN max(e.salary)
min() 函数
返回匹配记录中的最小值。
示例(查询最低工资):
MATCH (e:Employee)
RETURN min(e.salary)
sum() 函数
计算匹配记录中某字段的总和。
示例(计算工资总额):
MATCH (e:Employee)
RETURN sum(e.salary)
avg() 函数
计算匹配记录中某字段的平均值。
示例(计算平均工资):
MATCH (e:Employee)
RETURN avg(e.salary)
字符串函数
toUpper() 函数
将输入字符串转换为大写字母。
示例:
MATCH (e:Employee)
RETURN e.id, toUpper(e.name), e.salary, e.deptno
toLower() 函数
将输入字符串转换为小写字母。
示例:
MATCH (e:Employee)
RETURN e.id, toLower(e.name), e.salary, e.deptno
substring() 函数
提取子字符串,从 start_index 开始到 end_index-1 结束。
语法:
substring(input_str, start_index, end_index)
示例(返回员工名字的前两个字母):
MATCH (e:Employee)
RETURN e.id, substring(e.name, 0, 2), e.salary, e.deptno
replace() 函数
替换字符串中的指定部分。
语法:
replace(input_str, origin_str, new_str)
示例(为员工名字添加后缀):
MATCH (e:Employee)
RETURN e.id, replace(e.name, e.name, e.name + "_HelloWorld"), e.salary, e.deptno
示例(还原操作):
MATCH (e:Employee)
RETURN e.id, replace(e.name, "_HelloWorld", ""), e.salary, e.deptno
聚合函数
count() 函数
统计匹配的记录数量。
示例(统计员工总数):
MATCH (e:Employee)
RETURN count(*)
max() 函数
返回匹配记录中的最大值。
示例(查询最高工资):
MATCH (e:Employee)
RETURN max(e.salary)
min() 函数
返回匹配记录中的最小值。
示例(查询最低工资):
MATCH (e:Employee)
RETURN min(e.salary)
sum() 函数
计算匹配记录中某字段的总和。
示例(计算工资总额):
MATCH (e:Employee)
RETURN sum(e.salary)
avg() 函数
计算匹配记录中某字段的平均值。
示例(计算平均工资):
MATCH (e:Employee)
RETURN avg(e.salary)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)