Neo4J-图数据库入门

1. neo4j的简介

Neo4j是一种基于图形数据库模型 的开源图形数据库管理系统。它专注于存储和处理图形数据结构,如节点、关系和属性,以提供高效的图形数据查询和分析功能。

基于硬盘

为什么要使用

对数据的需求不在局限于对数据本身的获取,还需要获取数据与数据件的关系(就是连接数据)

简单来说,图数据库主要用于存储更多的连接数据。

2. 特点和优势

特点:

  1. 使用Neo4j CQL
  2. 遵循属性图数据模型
  3. 使用Apache Lucence 支持索引
  4. 支持 unique 约束
  5. 包含一个用于执行CQL命令的UI:Neo4j 数据浏览器
  6. 支持完整的事务(ACID)
  7. 采用原生图形库与本地GPE(图形处理引擎)
  8. 支持数据导出为Json 和XLS格式
  9. 提供rest api ,可以被任何编程语言调用
  10. 可以通过任意UI MVC 框架
  11. 支持Java API :Cypher API 和 Native Java API 来开发java 应用程序

优点:

  • 它很容易表示连接的数据
  • 检索/遍历/导航更多的连接数据是非常容易和快速的
  • 它非常容易地表示半结构化数据
  • Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
  • 使用简单而强大的数据模型
  • 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引

3. 名词

  1. 节点 节点通常用于表示实体
  2. 标签 标签用于分类节点
  3. 关系 图中的边表示关系,关系连接两个节点,如撰写关系
  4. 关系类型 关系与节点一样具有类型划分,但关系有且仅有一种关系类型。
  5. 属性 属性是用于描述节点和关系特性的名称 - 值
  6. 路径与遍历 在图中,查询过程是路径搜索与遍历的过程

4. 下载与安装

下载链接https://neo4j.com/download/

neo4j 博客 W3Cschool:Neo4j - 图形理论基础_w3cschool

支持三种版本

刚打开的时候就是需要一个激活码

eyhbGci0jQUzl1 NilsinR5ccl6lkpxvcj9.eyjyWxsYmFjayl6llsimvtywisljolMjQ2MTYyNjc2ODYyQHFxLmNvbslslmZvcm hdcl6lmpzb24iLC]vcmci0ij3dwhhbiB1bml2ZXjzaXR5liwicHVilioibmVvNGouY29tliwicmVnlioiewluZyBsaxUiLC]zdWiiOijuZw80ai1kZXNrdY29tliwibmImljoxNTg4MikONZIzLCIPYXQIOjE1ODgyOTQ3MiG9wliwiZXhwli0xNiE5ODMWNZIZLC12ZXli0ilgliwiaXNzlioibmVNGouMslmp0asl6Ink4UzVVdF8yZU19.ZNpBYhS!6eOL8IxOcE1 CPYPCyIz61w2G6tpseLc20qm5|xpdigiDMtscjXGY3nloha_7oNxqEl0neovPSuZGChITCZEWKmHKn4IFKmOyh1 0SiFIdtQ9pQIELIVIBO QMtWYS0r6zbgydTm1 S9tGuibNFdKKIWfOW7GMaMHiAoSQhQzEtyVtt] DSErREZVX6HQA0XpgwKIwalvk, SZGeUwE1 giuXBlG87flpMPkgDOmzapSGVPrQLL-K6-LViLrS37A!XIGZGmKPX61_goQrnyBvGRYk77y65FolimlbVzaKsGyDtXVD1yx6sgtR3mN740cS6bAmel3hG8boXO

5. 一些实际操作

5.1. 切换数据库

复制代码
use 数据库名
也可以手动切换

5.2. 清空

复制代码
match (n) detach delete n

match是匹配 操作,可以简单的理解为相当于mysql中的select 操作,而小括号()代表一个节点 node(可理解为括号类似一个圆形),括号里面的n为标识符

5.3. 创建persion节点

复制代码
create (n:Person{name:"John"}) return n

create是创建 操作,persion是标签 ,代表节点的类型。花括号 {} 代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是John。

创建成功

复制代码
create (:Person {name:'Sally'}) 
create (:Person {name:'Steve'}) 
create (:Person {name:'Mike'}) 
create (:Person {name:'Liz'}) 
create (:Person {name:'Shawn'}) 

5.4. 创建地区节点

复制代码
create (n:Location {city:'Miami', state:'FL'})
create (n:Location {city:'Boston', state:'MA'})
create (n:Location {city:'Lynn', state:'MA'})
create (n:Location {city:'Portland', state:'ME'})
create (n:Location {city:'San Francisco', state:'CA'})

现在一共有 6 个人物节点 以及5 个地区节点

5.5. 接下来创建关系

复制代码
match (a:Person {name:'Liz'}), 
      (b:Person {name:'Mike'}) 
merge (a)-[:FRIENDS]->(b)

这里的方括号\[\]即为关系,FRIENDS为关系的类型。注意这里的箭头-->是有方向的,表示是从a到b的关系。 如图,Liz和Mike之间建立了FRIENDS关系,通过Neo4J的可视化很明显的可以看出

关系也可以增加属性

复制代码
match(a:Person {name:'Shawn'}), 
      (b:Person {name:'Sally'}) 
merge (a)-[:FRIENDS {since:2001}]->(b)

在关系中,同样的使用花括号{}来增加关系的属性,也是类似Python的字典,这里给FRIENDS关系增加了since属性,属性值为2001,表示他们建立朋友关系的时间。

为剩下的 添加关系

复制代码
match (a:Person {name:'Shawn'}), (b:Person {name:'John'}) merge (a)-[:FRIENDS {since:2012}]->(b);
match (a:Person {name:'Mike'}), (b:Person {name:'Shawn'}) merge (a)-[:FRIENDS {since:2006}]->(b);
match (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) merge (a)-[:FRIENDS {since:2006}]->(b);
match (a:Person {name:'Liz'}), (b:Person {name:'John'}) merge (a)-[:MARRIED {since:1998}]->(b)

建立不同类型节点之间的关系-人物和地点的关系

复制代码
match (a:Person {name:'John'}), 
  (b:Location {city:'Boston'}) 
merge (a)-[:BORN_IN {year:1978}]->(b)

为剩下的建立关系

复制代码
match (a:Person {name:'Liz'}), (b:Location {city:'Boston'}) merge (a)-[:BORN_IN {year:1981}]->(b);
match (a:Person {name:'Mike'}), (b:Location {city:'San Francisco'}) merge (a)-[:BORN_IN {year:1960}]->(b);
match (a:Person {name:'Shawn'}), (b:Location {city:'Miami'}) merge (a)-[:BORN_IN {year:1960}]->(b);
match (a:Person {name:'Steve'}), (b:Location {city:'Lynn'}) merge (a)-[:BORN_IN {year:1970}]->(b)

知识图谱的数据已经插入完毕,可以开始做查询了。我们查询下所有在Boston出生的人物

5.6. 增删改查

复制代码
match (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) return a,b

5.6.1. 查询所有对外有关系的节点

复制代码
match (a)-->() return a

注意这里箭头的方向,返回结果不含任何地区节点,因为地区并没有指向其他节点(只是被指向)

5.6.2. 查询所有有关系的节点

复制代码
match (a)--() return a

5.6.3. 查询所有对外有关系的节点,以及关系类型

复制代码
match (a)-[r]->() return a.name, type(r)

5.6.4. 查询所有有结婚关系的节点

复制代码
MATCH (n)-[:MARRIED]-() RETURN n

5.6.5. 创建节点的时候就建好关系

复制代码
CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person {name:'Carlos'})

5.6.6. 查找某人的朋友的朋友

复制代码
match (a:Person {name:'Mike'})-[r1:friends]-()-[r2:friends]-(friend_of_a_friend) return friend_of_a_friend.name AS fofName

5.6.7. 增加/修改节点的属性

复制代码
match (a:Person {name:'Liz'}) set a.age=34;
match (a:Person {name:'Shawn'}) set a.age=32;
match (a:Person {name:'John'}) set a.age=44;
match (a:Person {name:'Mike'}) set a.age=25

这里的 set 表示 修改

5.6.8. 删除节点属性

复制代码
match (a:Person {name:'Mike'}) set a.test='test';
match (a:Person {name:'Mike'}) remove a.test

通过 remove 进行删除属性

设置属性后

删除后

5.6.9. 删除节点

复制代码
match (a:Location {city:'Portland'}) delete a

删除节点 用 delete

5.6.10. 删除所有关系的节点

复制代码
match (n)
detach delete n

detach delete会先删除所有节点的关系,然后再删除节点本身,

相关推荐
YangYang9YangYan2 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
大大大大晴天2 小时前
OpenMetadata VS DataHub VS Atlas VS Gravitino
大数据
Qyr995 小时前
2026全球汽车碳刷行业发展全景分析报告
大数据
蓝速科技6 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
精益数智工坊7 小时前
云计算环境数据怎么同步?云计算集成方案有哪些?
大数据·人工智能·数据挖掘·数据可视化
huashengzsj8 小时前
什么是DMS经销商管理系统?国内经销商管理系统有哪些品牌
大数据
IT毕设梦工厂8 小时前
计算机毕业设计选题推荐:基于大数据的草鱼价格分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·数据挖掘·数据分析·课程设计·大数据毕设项目
辛迪聊物业数字化9 小时前
智慧社区物业管理软件新手部署与实操指南
大数据·php
字节跳动数据平台9 小时前
模型再强,为什么 Demo 还是进不了生产?
大数据
南京兴帝文化传媒有限公司9 小时前
本地生活服务GEO优化实战:宁国花店地图关键词布局带来订单翻倍的技术路径
大数据·人工智能·生活·geo 优化·geo优化避坑·ai搜索获客