图数据库Neo4J入门——Neo4J下载安装+Cypher基本操作+《西游记》人物关系图实例

这里写目录标题

  • 一、效果图
  • 二、环境准备
  • 三、数据库设计
    • 3.1 人物节点设计
    • 3.2 关系设计
  • 四、操作步骤
    • 4.1 下载、安装、启动Neo4J服务
      • 4.1.1 配置Neo4J环境变量
      • 4.1.2 启动Neo4J服务器
      • 4.1.3 启动Ne04J客户端
    • 4.2 创建节点
    • 4.3 创建关系(从已有节点创建关系)
    • 4.4 查询节点
    • 4.5 查询关系
    • 4.6 删除节点与关系

善始者繁多,克终者盖寡。

Neo4J属于NoSQL数据库的一种,具体来说属于图数据库,以存储类型划分常见的数据库分类如图所示。

在这里插入图片描述

在Neo4J中节点、关系、标签共同组成了一张图,图中每个元素有具有各自的属性,Neo4J与MySQL中名词解释可以对照如下表格。在MySQL中使用SQL实现增删改查等功能,在Neo4J中使用Cypher来实现,所以Cypher又称“CQL”。

MySQLNeo4J
数据库
标签
记录节点
属性属性
XXX关系
SQL(Structured Query Language)CQL (Cypher Query Language)

本文使用Neo4J绘制《西游记》中部分人物关系图。

一、效果图

使用Neo4J数据库绘制《西游记》中唐三藏、孙悟空、猪八戒、沙悟净、玉皇大帝、太白金星、如来佛祖、菩提老祖等8位人物的关系图。实现效果如图所示:

在这里插入图片描述

二、环境准备

Neo4J是一款基于java开发的数据库产品,运行Neo4J必须安装jdk。jdk1.8支持Neo4J的最后一个版本为3.5,高版本Neo4J需要高版本jdk,低版本Neo4J会兼容高版本jdk,官方文档可以看Neo4J官方文档。
本例中JDK版本为1.8,Neo4J版本为3.5,其他版本Neo4J可以在仓库下载。

三、数据库设计

3.1 人物节点设计

此例涉及《西游记》中8名角色,所以图中包含8个节点,各节点属性及其关系如图所示。

在这里插入图片描述

3.2 关系设计

此例中8个人物共产生了6种18个关系,各关系起止节点如图所示。

在这里插入图片描述

四、操作步骤

在写代码前我们先简单说明Neo4J和Cypher的关系。

  1. Neo4J是一款基于JAVA开发的数据库产品,Cypher是一种查询语言,Neo4J中的操作通过Cypher语言实现
  2. Neo4J与Cypher的关系类似于MySQL和SQL的关系,所以Cypher也被叫做CQL。

4.1 下载、安装、启动Neo4J服务

4.1.1 配置Neo4J环境变量

依次点击“此电脑-属性-高级系统设置-环境变量-Path”, 在Path中加入“E:\neo4j-community-3.5.0\bin”。

4.1.2 启动Neo4J服务器

以管理员身份打开命令行,输入“neo4j”,此时页面会返回“console | start”等指令,输入“neo4j console”启动neo4j服务器,服务器启动成功会显示“Remote interface available at http://localhost:7474/”。(可以将Neo4J注册为本地服务,让它开机自启动,本例中未进行此操作)

服务器地址为:127.0.0.1:7687

在这里插入图片描述

4.1.3 启动Ne04J客户端

在浏览器“localhost:7474”启动neo4j客户端。

localhost:7474

初次启动需要输入密码,初始密码为“neo4j”,登录成功后界面如图所示。(注意:初次登录需要修改密码,修改密码不能为“neo4j”)后续操作均在客户端中进行,在Neo4J中可以批量执行指令,但是此例中使用了相同的变量名,所有不能一次复制多行代码并执行,请逐条执行。

在这里插入图片描述

4.2 创建节点

create(m:`西游记`{ name:"唐三藏",type:"主角团",曾工作单位:"佛教"}) return m
create(m:`西游记`{ name:"孙悟空",type:"主角团",曾工作单位:"天庭"}) return m
create(m:`西游记`{ name:"猪八戒",type:"主角团",曾工作单位:"天庭"}) return m
create(m:`西游记`{ name:"沙悟净",type:"主角团",曾工作单位:"天庭"}) return m
create(m:`西游记`{ name:"玉皇大帝",单位:"天庭"}) return m
create(m:`西游记`{ name:"太白金星",单位:"天庭"}) return m
create(m:`西游记`{ name:"如来佛祖",单位:"佛教"}) return m
create(m:`西游记`{ name:"菩提老祖",单位:"佛教"}) return m

名为“唐三藏”的节点截图如下所示。

在这里插入图片描述

代码解析:

create(m:`西游记`{ name:"唐三藏",type:"主角团",曾工作单位:"佛教"}) return m
  1. 使用create指令创建节点,范围为小括号内的所有东西
  2. m为该节点的变量名,可随意取名
  3. “西游记”是该节点所属的标签,在文字左右均使用单撇号括起来
  4. “{}”内为节点的属性名称及其取值
  5. return指令用于在屏幕上显示该节点,可以不要

4.3 创建关系(从已有节点创建关系)

match(m{ name:"唐三藏"}),(n{ name:"孙悟空"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"唐三藏"}),(n{ name:"猪八戒"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"唐三藏"}),(n{ name:"沙悟净"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"唐三藏"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"菩提老祖"}),(n{ name:"孙悟空"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"孙悟空"}),(n{ name:"猪八戒"}) create (m)-[r:师兄]->(n) return r
match(m{ name:"孙悟空"}),(n{ name:"沙悟净"}) create (m)-[r:师兄]->(n) return r
match(m{ name:"猪八戒"}),(n{ name:"沙悟净"}) create (m)-[r:师兄]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"孙悟空"}) create (m)-[r:上司]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"猪八戒"}) create (m)-[r:上司]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"沙悟净"}) create (m)-[r:上司]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"太白金星"}) create (m)-[r:上司]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"孙悟空"}) create (m)-[r:恩人]->(n) return r
match(m{ name:"太白金星"}),(n{ name:"孙悟空"}) create (m)-[r:恩人]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"如来佛祖"}) create (m)-[r:朋友]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"玉皇大帝"}) create (m)-[r:朋友]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"菩提老祖"}) create (m)-[r:同事]->(n) return r
match(m{ name:"菩提老祖"}),(n{ name:"如来佛祖"}) create (m)-[r:同事]->(n) return r

效果图如下所示:
在这里插入图片描述
代码解析:

match(m{ name:"唐三藏"}),(n{ name:"孙悟空"}) create (m)-[r:师傅]->(n) return r
  1. match指令用于查询对应节点,作用范围为小括号内,多个节点通过逗号分隔开
  2. m、n是给拟查询节点起的别名,“{}”内表示查询的条件
  3. create指令用于创建关系
  4. “[r:师傅]”中r表示关系的别名,“师傅”是真正的关系名称,(m)(n)表示前面查询的两个节点
  5. return指令用于在屏幕上显示该关系,可以不要

4.4 查询节点

①查询所有节点

match(m) return m

②查询《西游记》中的节点

match(m:`西游记`) return m

③查询主角团

match(m) where m.type="主角团" return m

执行该指令会显示满足条件的所有节点。

在这里插入图片描述
④查询单位在天庭的角色(包含曾今在天庭的)

当包含多个查询条件时可以使用where指令指定查询条件。

match(m) where m.单位="天庭" or m.曾工作单位="天庭" return m

⑤查询单位在佛教的角色(包含曾今在佛教的)

match(m) where m.单位="佛教" or m.曾工作单位="佛教" return m

4.5 查询关系

①查询所有关系及关系对应的节点

match r=(m)-->(n) return r

②查询名为“师傅”的关系

match (m)-[r:师傅]->(n) return r

此例中所有关系均无属性,所有查询结果均为一对空括号。

在这里插入图片描述

③查询名为“师傅”的关系及关系对应的节点

match p=(m)-[r:师傅]->(n) return p

在这里插入图片描述
④查询名为“上司”的关系

match (m)-[r:上司]->(n) return r

⑤查询名为“上司”的关系及关系对应的节点

match p=(m)-[r:上司]->(n) return p

4.6 删除节点与关系

删除节点前需要先找到该节点并删除与之有关的“关系”否则会报错,例如:直接删除“太白金星”这个节点。这类似于在MySQL中删除某张表之前需要先删除该表中所有的外键及其他约束。

在这里插入图片描述
①查询“太白金星”为起始节点的关系

match (m{name:"太白金星"})-[r]->(n) return r

②查询“太白金星”为终止节点的关系

match (m{name:"太白金星"})<-[r]-(n) return r

③删除与“太白金星”有关的所有关系(边删边验证)

match (m{name:"太白金星"})-[r]->(n) delete r
match(m) return m
match (m{name:"太白金星"})<-[r]-(n) delete r
match(m) return m

④删除名为“太白金星”的节点

match(m{name:"太白金星"}) delete m
match(m) return m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625013.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

即插即用模块详解SCConv:用于特征冗余的空间和通道重构卷积

目录 一、摘要 二、创新点说明 2.1 Methodology 2.2SRU for Spatial Redundancy​编辑 2.3CRU for Channel Redundancy 三、实验 3.1基于CIFAR的图像分类 3.2基于ImageNet的图像分类 3.3对象检测 四、代码详解 五、总结 论文&#xff1a;https://openaccess.thecvf.c…

全网短剧搜索源码+短剧API接口 短剧下载 热门短剧 全开源可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 pc端h5手机端全网短剧搜索前端源码分享 内含7000短剧资源(不支持在线播放&#xff09; 搜索API接口&#xff1a;文件内查看 全部短剧API接口&#xff1a;文件内查看 每日更新API接…

【【相机运动】_Camera_shake镜头晃动动画】

【相机运动】:Camera shake镜头晃动动画 2022-07-20 20:28 评论(0)

【ROS2】搭建ROS2-Humble + Vscode开发流程

【ROS2】搭建ROS2-Humble Vscode开发流程 文章目录 【ROS2】搭建ROS2-Humble Vscode开发流程1.基本环境配置2.搭建Vscode开发环境 1.基本环境配置 基本的环境配置包括以下步骤&#xff1a; 安装ROS2-Humble&#xff0c;可以参考这里安装一些基本的工具&#xff0c;可以参考…

顺序表(快速上手数据结构)

在介绍ArrayList之前, 我们需要先了解List. List是一个接口,它继承于Collection接口(Collection又继承于最顶层的接口Iterable). 从数据结构的角度来看,List就是一个线性表(Linear List),即n个具有相同类型元素的有限序列, 在该序列上可以执行增删查改等操作. 注意: List是一…

BetterDisplay Pro for Mac 显示器校准和优化软件

BetterDisplay Pro for Mac是一款适用于Mac电脑的显示器校准和优化软件。它可以帮助用户校准显示器的颜色、亮度、对比度和伽马值等参数&#xff0c;使得显示器更加准确和清晰&#xff0c;提高用户的工作效率。 BetterDisplay Pro for Mac v2.0.11激活版下载 这款软件具有直观的…

cesium primitive 移动 缩放 旋转 矩阵

旋转参考&#xff1a;cesium 指定点旋转rectangle Primitive方式 矩阵篇-CSDN博客 平移参考&#xff1a;cesium 调整3dtiles的位置 世界坐标下 相对坐标下 平移矩阵-CSDN博客 一、primitive方式添加polygon let polygonInstance new Cesium.GeometryInstance({geometry: Ce…

快速入门Spring Data JPA

Spring Data JPA是Spring Data框架的一小部分&#xff0c;它能够让开发者能够更加简单的对数据库进行增删改查。 由于Spring Data JPA可以自动生成SQL代码所以一般情况下&#xff0c;简单的增删查改就可以交给Spring Data JPA来完成&#xff0c;而复杂的动态SQL等用MyBatis来完…

分类损失函数与评估指标

目录 1 评估指标 1.1 准确率 1.2 精确率 1.3 召回率 1.4 F1 score 1.5 ROC曲线 1.6 AUC 1.7 PRC曲线的优势 2 损失函数 1. 负对数似然损失 2. 交叉熵损失 3. 指数损失 3 分类问题为什么用交叉熵损失不用 MSE 损失 1 评估指标 混淆矩阵 TP(True Positive) ---- 正…

xxl-job使用自动注册节点,ip不对,如何解决????

很明显这时我们本机的ip和我们xxl-job自动注册的ip是不一致的&#xff0c;此时该如何处理呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; 方法一&#xff1a;在配置文件中&#xff0c;将我们的ip固定写好。 ### xxl-job executor server-info xxl.job.executor.ip写你的…

【LAMMPS学习】八、基础知识(3.3)使用分布式网格

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

Vue加载glb / gltf模型(如何在vue中使用Three.js,vue使用threejs加载glb模型)

简介&#xff1a;Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API&#xff0c;使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…