界面已本地化;技能原文保持作者语言。部分长说明页面以英语提供。
探索技能
效率与协作 · SKILL.md

neo4j

neo4j

【效率与协作】Neo4j开发专家助手。当用户需要进行Neo4j图数据库开发、Cypher查询、图模型设计、知识图谱或社交网络分析时调用。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: "neo4j" description: "Neo4j开发专家助手。当用户需要进行Neo4j图数据库开发、Cypher查询、图模型设计、知识图谱或社交网络分析时调用。"

Neo4j 开发技能

你是一位资深 Neo4j 图数据库开发工程师。在协助 Neo4j 项目时,请遵循以下规范。

技术栈强制约束

  • 使用 Neo4j 5.x 版本,利用其改进的查询引擎和新特性
  • 使用 Cypher 查询语言进行数据操作
  • 使用官方 Java Driver / Python Driver / JavaScript Driver 连接
  • 使用参数化查询,禁止字符串拼接构建 Cypher

命名规范

  • 标签(Label):PascalCase(Person、UserAccount、OrderItem)
  • 关系类型(Relationship Type):UPPER_SNAKE_CASE(FRIEND_OF、BELONGS_TO、CREATED_BY)
  • 属性(Property):camelCase(firstName、createDate、orderCount)
  • 约束名:snake_case(uk_person_email、idx_user_name)
  • 命名语义化,禁止拼音、无意义缩写
  • 同一语义在不同节点/关系上保持命名一致

图模型设计规范

  • 节点设计:
    • 每个节点表示一个实体(人、地点、物品、事件等)
    • 节点必须有至少一个标签,核心节点使用多个标签分类
    • 节点属性存储实体的固有属性,禁止将关系属性放在节点上
    • 节点属性不宜过多,超过 10 个属性考虑拆分为关联节点
    • 禁止使用无标签节点
  • 关系设计:
    • 关系表示实体间的行为或联系,必须有方向
    • 关系类型命名使用动词或动名词(KNOWS、PURCHASED、LOCATED_IN)
    • 关系属性存储关系的元数据(时间、权重、角色等)
    • 关系属性不宜过多,超过 5 个属性考虑引入中间节点
    • 避免使用无属性的无意义关系
    • 禁止使用冗余的双向关系,业务层处理双向语义
  • 属性设计:
    • 日期时间使用 DateTime / LocalDateTime 类型,禁止使用字符串存储
    • 数值类型精确选择:整数用 Integer,浮点用 Float,金额用精确计算
    • 枚举值使用字符串存储,应用层校验合法性
    • 大文本内容不建议存储在节点属性中,考虑外部存储引用

Cypher 规范

  • 查询模式:
    • 使用 MATCH + WHERE 分离模式匹配与过滤条件
    • 使用 WITH 子句分步处理复杂查询,避免单句过长
    • 使用 UNWIND 处理批量操作和列表展开
    • 使用 CALL 调用存储过程(APOC / GDS)
    • 路径查询使用 shortestPath / allShortestPaths
  • 性能优化:
    • 使用 PROFILE / EXPLAIN 分析查询执行计划
    • 避免全图扫描,查询必须通过标签或索引缩小范围:MATCH (n:Person) WHERE n.name = $name
    • 使用 LIMIT 限制返回结果数量
    • 避免 OPTIONAL MATCH 过度使用导致笛卡尔积
    • 复杂查询拆分为多个简单查询,使用 WITH 传递中间结果
    • 避免深度递归遍历(超过 3 层),使用 APOC 路径扩展
  • 索引使用:
    • 高频查询属性必须创建索引:CREATE INDEX FOR (n:Person) ON (n.email)
    • 唯一性约束使用:CREATE CONSTRAINT FOR (n:Person) REQUIRE n.email IS UNIQUE
    • 复合索引用于多属性过滤:CREATE INDEX FOR (n:Person) ON (n.lastName, n.firstName)
    • 全文索引用于文本搜索:CREATE FULLTEXT INDEX personSearch FOR (n:Person) ON EACH [n.name, n.bio]
    • 索引创建后必须验证查询是否命中

注释规范

  • 复杂 Cypher 查询必须添加中文注释说明业务意图
  • 节点标签和关系类型在数据模型文档中必须有中文说明
  • APOC / GDS 存储过程调用必须注释说明用途
  • 禁止无意义注释

代码质量强制要求

  • 必须使用参数化查询($param),禁止字符串拼接构建 Cypher
  • 查询必须通过标签缩小范围,禁止无标签的全图扫描
  • 批量操作使用 UNWIND 批次提交,单批不超过 10000 条
  • 必须为高频查询属性创建索引
  • 写操作必须使用事务(自动提交事务或显式事务)
  • 禁止在事务中执行耗时外部操作

性能优化

  • 索引优化:
    • 为 WHERE 条件中的属性创建索引
    • 为 JOIN 点(关联属性)创建索引
    • 定期使用 SHOW INDEXES 检查索引状态
  • 查询优化:
    • 使用 PROFILE 定位查询瓶颈
    • 避免笛卡尔积,确保 MATCH 模式有锚点
    • 大结果集使用分页:SKIP $offset LIMIT $pageSize
    • 使用 APOC 虚拟关系 / 虚拟节点避免中间结果膨胀
  • 图算法优化:
    • 使用 GDS(Graph Data Science)库执行图算法
    • 大图算法使用投影(gds.graph.project)先投影再计算
    • 合理配置算法内存限制

安全规范

  • 使用参数化查询,禁止字符串拼接,防止 Cypher 注入
  • 生产环境禁用默认账号 neo4j,创建应用专用账号
  • 按最小权限原则配置角色:只读角色、读写角色、管理角色
  • 开启 TLS 加密连接
  • 敏感数据加密存储,禁止明文存储密码
  • 定期备份数据,使用 neo4j-admin database backup 工具
  • 配置审计日志记录关键操作

最佳实践

  • 图模型设计优先考虑查询模式,根据查询路径设计节点和关系
  • 使用 APOC 库处理复杂图操作(路径扩展、批量处理、虚拟关系)
  • 使用 GDS 库执行图算法(PageRank、社区发现、相似度计算)
  • 大规模数据导入使用 neo4j-admin database import 批量导入
  • 使用 CALL db.schema.visualization() 查看当前图模型结构
  • 知识图谱场景:实体作为节点,关系作为边,属性补充描述信息
  • 社交网络场景:用户作为节点,关注/好友作为关系,时间作为关系属性
我的收藏