快速入门 Cypher 语法 
Cypher 是图数据库 Neo4j 的查询语言,用于操作"节点(Node)-关系(Relationship)-属性(Property)"构成的图数据模型。以下从核心概念和基础操作带你快速上手。
1. 核心概念理解 
图数据库用"节点"表示实体(如用户、商品),"关系"表示实体间关联(如关注、购买),"属性"是实体/关系的键值对信息(如姓名、价格)。
- 节点(Node):用一对圆括号 - ()表示,格式为- (标签:Label {属性: 值})。 示例:表示名为 "Alice"、年龄 30 的用户节点cypher- (user:Person {name: 'Alice', age: 30})
- 关系(Relationship):用一对中括号 - []表示,格式为- -[关系类型:Type {属性: 值}]->(- ->表示方向,双向可省略方向或写- --)。 示例:表示 "Alice" 关注 "Bob" 的关系(带 "创建时间" 属性)cypher- -[follow:FOLLOW {created_at: '2024-01-01'}]->
- 属性(Property):节点/关系的键值对,用 JSON 风格的 - {key: value}定义,值支持字符串、数字、布尔等类型。
2. 基础操作:创建数据 
2.1 创建单个节点 
用 CREATE 子句,语法:CREATE 节点。 示例:创建一个标签为 Person、名为 "Bob" 的节点
CREATE (p:Person {name: 'Bob', age: 25})2.2 创建节点 + 关系(连缀创建) 
用 CREATE 连缀节点和关系,语法:CREATE 起始节点-[关系]->目标节点。 示例:创建 "Alice" 并让她关注 "Bob"
CREATE (a:Person {name: 'Alice', age: 30})-[f:FOLLOW {created_at: '2024-01-01'}]->(b:Person {name: 'Bob', age: 25})3. 查询数据:MATCH 与 RETURN 
MATCH 用于匹配图中的模式(节点、关系),RETURN 用于返回结果。
3.1 简单查询:匹配单个节点 
语法:MATCH 节点模式 RETURN 字段。 示例:查询所有 Person 节点的姓名
MATCH (p:Person) 
RETURN p.name3.2 带条件过滤:WHERE 
用 WHERE 追加条件,语法:MATCH ... WHERE 条件 RETURN ...。 示例:查询年龄大于 28 的 Person 节点
MATCH (p:Person) 
WHERE p.age > 28 
RETURN p.name, p.age3.3 匹配关系(带方向) 
语法:MATCH 起始节点-[关系]->目标节点 RETURN ...。 示例:查询 "Alice" 关注的人(关系方向由 -> 控制)
MATCH (a:Person {name: 'Alice'})-[f:FOLLOW]->(target:Person) 
RETURN target.name4. 更新与删除 
4.1 更新属性:SET 
用 SET 修改节点/关系的属性,语法:MATCH ... SET 字段 = 新值 RETURN ...。 示例:将 "Bob" 的年龄改为 26
MATCH (p:Person {name: 'Bob'}) 
SET p.age = 26 
RETURN p.name, p.age4.2 删除节点/关系:DELETE 
删除前需先 MATCH 到目标,再用 DELETE 移除。 示例:删除 "Alice" 关注 "Bob" 的关系
MATCH (a:Person {name: 'Alice'})-[f:FOLLOW]->(b:Person {name: 'Bob'}) 
DELETE f5. 高级特性速览 
5.1 可变长度路径 
用 * 匹配可变长度关系,语法:[关系类型*最小..最大]。 示例:查找 1-3 跳的关注链
MATCH (a:Person)-[:FOLLOW*1..3]->(b:Person)
RETURN a.name, b.name5.2 聚合函数 
支持 COUNT()、SUM()、AVG() 等聚合,常配合 GROUP BY(隐式)。 示例:统计每人的关注者数量
MATCH (p:Person)<-[:FOLLOW]-(follower:Person)
RETURN p.name, COUNT(follower) AS follower_count
ORDER BY follower_count DESC5.3 子查询传递:WITH 
用 WITH 将中间结果传递给下一步查询。 示例:找出关注者超过 5 人的用户,再查看他们关注的人
MATCH (p:Person)<-[:FOLLOW]-(follower:Person)
WITH p, COUNT(follower) AS follower_count
WHERE follower_count > 5
MATCH (p)-[:FOLLOW]->(following:Person)
RETURN p.name, following.name6. 关键子句速查表 
| 子句 | 作用 | 示例场景 | 
|---|---|---|
| CREATE | 创建节点/关系 | 新增用户、新增关注关系 | 
| MATCH | 匹配图中的模式(节点/关系) | 查找特定用户、查找关注链 | 
| RETURN | 返回查询结果 | 输出节点属性、统计数量 | 
| WHERE | 过滤条件 | 按年龄/姓名筛选、按关系属性筛选 | 
| SET | 修改属性 | 更新用户年龄、关系的创建时间 | 
| DELETE | 删除节点/关系 | 移除无效关系、注销用户节点 | 
| WITH | 传递中间结果 | 多步查询、复杂过滤条件 | 
7. 性能优化提示 
- 使用标签过滤:始终指定节点标签 (:Person)而非匿名节点()
- 创建索引:为常查属性建索引提速cypherCREATE INDEX ON :Person(name)
- 限制结果:用 LIMIT控制返回数量,避免大结果集
- 参数化查询:应用中使用参数 $name而非硬编码值
8. 使用 Kuzu 体验 Cypher 
Kuzu 是一个嵌入式的图数据库,专为查询速度和可扩展性而设计。它针对非常大的图进行优化,以处理复杂的连接密集型分析工作负载,具备以下核心功能:
- 属性图数据模型和 Cypher 查询语言
- 内嵌(进程内)的应用程序集成
- 列式基于磁盘的存储
- 列式压缩的稀疏行基(CSR)邻接列表和连接索引
- 向量化的因子化查询处理
- 新颖且高效的连接算法
- 多核查询并行处理
- 可串行化的 ACID 事务
Kuzu 是单个可执行文件,下载后直接运行即可。访问 Kuzu Installation 获取最新版本。
下载示例数据:
curl -o tutorial_data.zip https://kuzudb.com/data/tutorial/tutorial_data.zip
unzip tutorial_data.zip
rm tutorial_data.zip启动 Kuzu 命令行:
kuzu加载示例数据:
COPY User FROM 'tutorial_data/node/user.csv';
COPY Post FROM 'tutorial_data/node/post.csv';
COPY LIKES FROM 'tutorial_data/relation/LIKES.csv';
COPY FOLLOWS FROM 'tutorial_data/relation/FOLLOWS.csv';
COPY POSTED FROM 'tutorial_data/relation/POSTS.csv';执行示例查询:
MATCH (a:User) RETURN a.* LIMIT 3;更多查询示例,参考 Kuzu Cypher Tutorial。
退出:
:quit