知识图谱入门——5:Neo4j Desktop安装和使用手册(小白向:Cypher 查询语言:逐步教程!Neo4j 优缺点分析)

Neo4j简介

Neo4j 是一个基于图结构的 NoSQL 数据库,专门用于存储、查询和管理图形数据。它的核心思想是使用节点、关系和属性来描述数据。图数据库非常适合那些需要处理复杂关系的数据集,如社交网络、推荐系统、知识图谱等领域。

与传统的关系型数据库相比,Neo4j 不仅在查询速度上占有优势,而且可以直观地展示数据之间的复杂关系。

Neo4j 官网下载地址:Neo4j Developer Tools
如果下载较慢,安装包我已经上传到我的资源里

Neo4j安装步骤

1. 安装步骤
安装教程较多,我推荐一篇:
【知识图谱】neo4j桌面版安装与配置(2024年最新最全教程)
最后你可能看见这个页面(用的官方案例):没出现图正常,点击这个就出现了
在这里插入图片描述
在这里插入图片描述

2. 启动 Neo4j

安装完成后,打开 Neo4j Desktop,选择 New Project 创建一个新项目,接着点击 Add Database,选择默认数据库类型。随后,你可以启动这个数据库,并进入 Neo4j 浏览器界面。该浏览器为一个内置的查询工具,可以在其中输入 Cypher 查询语句。


Cypher 查询语言

Cypher 是 Neo4j 提供的声明式查询语言,专门用于操作图数据。它与 SQL 类似,但更加适合图数据库的数据结构,包括节点(Nodes)、关系(Relationships)和属性(Properties)。Cypher 的核心在于通过图模式匹配来查询和操作数据,具有直观的语法设计。

1. 基本概念与术语

在 Cypher 中,数据的结构由 节点(Node)关系(Relationship)属性(Property) 组成。

  • 节点 (Node): 实体,表示图中的对象。使用圆括号 ( ) 来表示。

    • 例:(n) 表示一个节点,(a:Person) 表示类型为 “Person” 的节点。
  • 关系 (Relationship): 两个节点之间的连接。用方括号 [ ] 表示,方向用箭头 -><- 表示。

    • 例:(a)-[r:KNOWS]->(b) 表示节点 a 和节点 b 之间的 “KNOWS” 关系。
  • 属性 (Property): 节点或关系的键值对,用花括号 {} 表示。

    • 例:(a:Person {name: 'Alice', age: 30}) 表示节点 a 有两个属性 nameage

2. 创建数据

Cypher 提供了 CREATE 语句来创建节点、关系及其属性。基本的语法是:

2.1 创建节点

CREATE (n:Label {propertyKey: propertyValue, ...})

例子:

// 创建一个名称为 Alice,年龄为 30 的 "Person" 节点
CREATE (a:Person {name: 'Alice', age: 30});

输入到红框里,点击右面蓝色三角形运行后,会到下方,记录你的每一步操作。
在这里插入图片描述

2.2 创建关系

CREATE (node1)-[relationship:TYPE]->(node2)

例子:

// 创建 Alice 和 Bob 节点之间的关系,表示 Alice 认识 Bob
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:KNOWS]->(b);

在这里插入图片描述


3. 查询数据

Cypher 查询的核心是 MATCH 语句,用来匹配图中的模式,并返回相关的节点和关系。基本的语法是:

3.1 查询节点

MATCH (n:Label {propertyKey: propertyValue, ...})
RETURN n;

例子:

// 查询所有名称为 Alice 的 "Person" 节点
MATCH (n:Person {name: 'Alice'})
RETURN n;

3.2 查询关系

MATCH (n1:Label1)-[r:RELATIONSHIP_TYPE]->(n2:Label2)
RETURN n1, r, n2;

例子:

// 查询 Alice 认识谁
MATCH (a:Person {name: 'Alice'})-[:KNOWS]->(b)
RETURN a, b;

在这里插入图片描述

3.3 查询特定属性

可以通过 WHERE 子句来过滤查询结果,类似 SQL 中的 WHERE

MATCH (n:Label)
WHERE n.propertyKey = propertyValue
RETURN n;

例子:

// 查询所有年龄大于 30 的 "Person"
MATCH (n:Person)
WHERE n.age > 30
RETURN n;

在这里插入图片描述


4. 更新数据

Cypher 提供了 SET 语句来更新节点或关系的属性。

4.1 更新节点的属性

MATCH (n:Label {propertyKey: propertyValue, ...})
SET n.propertyKey = newValue
RETURN n;

例子:

// 更新 Alice 的年龄为 35
MATCH (a:Person {name: 'Alice'})
SET a.age = 35
RETURN a;

在这里插入图片描述

4.2 为节点添加新属性

MATCH (n:Label {propertyKey: propertyValue, ...})
SET n.newPropertyKey = newPropertyValue
RETURN n;

例子:

// 为 Alice 添加一个新的属性 country,值为 'USA'
MATCH (a:Person {name: 'Alice'})
SET a.country = 'USA'
RETURN a;

在这里插入图片描述

4.3 更新关系的属性

MATCH (n1)-[r:RELATIONSHIP_TYPE]->(n2)
SET r.propertyKey = newValue
RETURN r;

例子:

// 更新 Alice 和 Bob 之间的认识时间为 2023
MATCH (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'})
SET r.since = 2023
RETURN r;

在这里插入图片描述


5. 删除数据

Cypher 提供 DELETE 语句来删除节点、关系。

5.1 删除节点

MATCH (n:Label {propertyKey: propertyValue, ...})
DELETE n;

例子:

// 删除 Alice 节点
MATCH (a:Person {name: 'Alice'})
DELETE a;

注意:删除节点时,如果节点还有关系存在,Neo4j 会抛出错误,必须先删除相关的关系。
在这里插入图片描述

5.2 删除关系

MATCH (n1)-[r:RELATIONSHIP_TYPE]->(n2)
DELETE r;

例子:

// 删除 Alice 和 Bob 之间的认识关系
MATCH (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'})
DELETE r;

在 Neo4j 中,如果你想删除数据库中的所有数据,可以使用 MATCH 语句结合 DELETE 操作,删除所有的节点及其关联的关系。以下是具体步骤:
在这里插入图片描述

5.3. 删除所有关系

在 Neo4j 中,节点之间的关系是必须先删除的,才能删除节点。可以通过以下命令删除图中的所有关系:

MATCH ()-[r]-()
DELETE r;

此语句会匹配数据库中的所有关系 [r] 并删除它们。这里的 ( )-[r]-( ) 表示图中的所有节点之间的关系。

5.4. 删除所有节点

关系删除后,可以删除所有节点。使用以下命令:

MATCH (n)
DELETE n;

此命令将删除数据库中的所有节点 (n)


一步完成:删除所有节点和关系

可以将以上两步合并成一步,直接删除图中所有的数据(节点及其关系):

MATCH (n)
DETACH DELETE n;

DETACH DELETE 会自动删除节点和所有相关的关系,因此可以一步删除整个数据库的数据。

注意
  • 执行 DETACH DELETE 会彻底清空数据库中的所有数据,这个操作是不可逆的。
  • 该操作适合于开发或测试环境,避免在生产环境误操作。

6. 合并数据 (MERGE)

MERGE 语句用于查找或创建节点或关系。如果图中不存在匹配的节点或关系,MERGE 会创建它们;如果已经存在,则不会创建。

MERGE (n:Label {propertyKey: propertyValue, ...})

例子:

// 如果图中没有名为 Charlie 的 "Person" 节点,则创建一个
MERGE (c:Person {name: 'Charlie'});

在这里插入图片描述


7. 聚合函数与分组查询

Cypher 提供了许多聚合函数,如 COUNT, SUM, AVG, MIN, MAX,并支持使用 WITH 子句进行分组。

7.1 计数节点

MATCH (n:Label)
RETURN COUNT(n);

例子:

// 统计 "Person" 节点的数量
MATCH (p:Person)
RETURN COUNT(p);

在这里插入图片描述

7.2 按属性分组

MATCH (n:Label)
WITH n.propertyKey AS groupKey, COUNT(n) AS count
RETURN groupKey, count;

例子:

// 按年龄分组,统计每个年龄的人数
MATCH (p:Person)
WITH p.age AS age, COUNT(p) AS count
RETURN age, count;

在这里插入图片描述


8. 路径查询

在图数据库中,路径 是一个非常重要的概念。Cypher 可以查询节点之间的路径及其长度。

MATCH path = (n1)-[r*..length]-(n2)
RETURN path;

例子:

// 查找 Alice 和 Bob 之间所有长度不超过 3 的路径
MATCH path = (a:Person {name: 'Alice'})-[*..3]-(b:Person {name: 'Bob'})
RETURN path;

在这里插入图片描述


9. 深度查询与递归关系

通过使用 * 可以进行递归查询。例如,查询两个节点之间的多级关系。

MATCH (n1)-[r*..depth]->(n2)
RETURN n1, r, n2;

例子:

// 查找 Alice 认识的所有人及其认识的人的关系
MATCH (a:Person {name: 'Alice'})-[*..2]-(b)
RETURN a, b;

在这里插入图片描述


Cypher 总结(为了你能回答别人)

Cypher 作为 Neo4j 的查询语言,专注于图形数据的直观查询和操作。其简洁、强大的语法,使得开发者能够高效地进行复杂的关系分析。在大规模知识图谱、社交网络和推荐系统等场景中,Cypher 的图模式匹配能力为数据分析提供了不可替代的优势。

Cypher 的灵活性使得图查询可以非常高效地与业务需求结合,尤其是在需要探索复杂关系链时,它的表现尤为出色。

Cypher高阶用法

知识图谱入门——6:Cypher 查询语言高级组合用法(查询链式操作、复杂路径匹配、条件逻辑、动态模式创建,以及通过事务控制和性能优化处理大规模数据。

总结

Neo4j 的出现填补了传统关系型数据库在复杂关系处理上的不足,特别是在知识图谱构建和图分析任务中,它展现出独特的优势。传统关系型数据库虽然能通过表结构和外键管理关系数据,但在处理深层次和复杂关系查询时性能较差。而 Neo4j 通过其图形化的数据模型,专注于关系的高效存储与查询,能够以直观的方式呈现复杂的数据实体与其间的关联。

在知识图谱构建中,数据通常高度互联,需要处理多跳关系查询和复杂的推理任务。Neo4j 的图遍历算法和灵活的 Cypher 查询语言大大简化了这些任务,开发者可以轻松表达和探索图中的复杂结构。这为快速挖掘隐藏在数据中的深层次知识和模式提供了强有力的支持。

然而,Neo4j 也有其局限性,特别是在大规模数据的写入场景中。图数据库的结构要求在插入数据时进行更多的图关系维护,这导致其写入性能相对较弱。此外,由于每个节点和关系都有额外的元数据存储需求,存储空间开销也较大。这意味着在构建大规模动态数据系统时,开发者可能需要权衡写入效率与查询性能,或结合其他大数据技术进行优化。

以下是 Neo4j 在功能表现上的优缺点分析:

功能优点不足
关系查询高效,多跳查询快速大规模写入性能不佳
数据模型直观,易理解存储空间开销较大
社区支持丰富API,活跃社区事务一致性稍弱
扩展能力灵活的扩展机制分布式支持相对有限
学习成本图形化表达直观Cypher 学习要求较高

在大数据时代,Neo4j 的优势特别体现在需要快速挖掘复杂关系和构建知识网络的场合,尤其是大规模数据关联性强的场景中。作为图谱开发者,我认为 Neo4j 最理想的应用场景是在知识图谱、社交网络分析、推荐系统等复杂关系密集的领域。通过其高效的关系查询和直观的数据建模,开发者可以快速发现数据中的潜在模式和知识关联。

但对于涉及频繁大量写入的数据场景,性能可能成为瓶颈,尤其是在处理实时动态数据时,需要结合诸如 Kafka、Spark 这样的技术来处理高并发写入需求,确保系统的整体性能和稳定性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何快速给word文件加拼音?请跟着步骤完成吧

如何快速给word文件加拼音&#xff1f;在日常工作中&#xff0c;我们时常会遇到需要为Word文件中的文字添加拼音的情况&#xff0c;这尤其在教育、出版或国际交流等领域显得尤为重要。为文字配上拼音&#xff0c;不仅能帮助学习者准确发音&#xff0c;还能提升文档的可读性和普…

【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);

前言 &#x1f31f;&#x1f31f;本期讲解关于锁的相关知识了解&#xff0c;这里涉及到高频面试题哦~~~ &#x1f308;上期博客在这里&#xff1a;【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&am…

【STM32单片机_(HAL库)】4-2-1【定时器TIM】定时器输出PWM实现呼吸灯实验

1.硬件 STM32单片机最小系统LED灯模块 2.软件 pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "pwm.h"int main(void) {HA…

【瑞萨RA8D1 CPK开发板】串口的使用和STDOUT输出重定向

串口 本次串口的使用关于时钟导致串口的波特率不对&#xff0c;坑了我很久的时间 使能时钟 串口发现一个问题就是&#xff0c;只能使用下边的时钟配置&#xff0c;修改时钟源和分频系数都会导致串口波特率不正常&#xff0c;这种问题出现在mdkrasc的使用场景之下&#xff1b…

adaptor lora基础

https://www.zhihu.com/question/508658141/answer/3340979311 adaptor和PEFT的区别&#xff1a;前者在模型子层后加一个小型的dense&#xff1b;后者直接稀疏化模型本身&#xff1b; Loading Pre-Trained Adapters — AdapterHub documentation CVPR 2024 | SD-DiT&#xff…

Python | Leetcode Python题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; class Solution:def validIPAddress(self, queryIP: str) -> str:if queryIP.find(".") ! -1:# IPv4last -1for i in range(4):cur (len(queryIP) if i 3 else queryIP.find(".", last 1))if cur -1:return &q…

每日OJ题_牛客_小乐乐改数字_模拟_C++_Java

目录 牛客_小乐乐改数字_模拟 题目解析 C代码 Java代码 牛客_小乐乐改数字_模拟 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 小乐乐喜欢数字&#xff0c;尤其喜欢0和1。他现在得到了一个数&#xff0c;想把每位的数变成0或1。如果某一位是奇数&#…

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

大数据之——VWare、Ubuntu、CentOs、Hadoop安装配置

前言&#xff1a;这里很抱歉前几期考研专题以及PyTorch这些内容都没有更新&#xff0c;并不是没有在学了&#xff0c;而是事太鸡儿多了&#xff0c;前不久刚刚打完华为开发者比赛&#xff0c;然后有紧接着高数比赛、考研复习&#xff0c;因此这些后续文章都在草稿状态中&#x…

Allegro在PCB上开槽的三种方法操作指导

Allegro如何在PCB上开槽的三种方法操作指导 当PCB有特殊设计要求的时候&#xff0c;需要在PCB上开槽&#xff0c;Allegro支持在PCB上开槽操作&#xff0c;具体操作如下 以下图为例&#xff0c;需要在这个板框中间开槽 开方形槽 选择shape add rect命令 画在Board Geometry-o…

【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)

文章目录 【技术详解】SpringMVC框架全面解析&#xff1a;从入门到精通(SpringMVC)SpringMVC概述1. 三层架构与MVC架构区别1.1 三层架构1.2 MVC架构1.3前后端分离开发模式 2. SpringMVC环境搭建2.1 注解启动方式2.2 xml启动方式2.3 SpringMVC PostMan工具使用 3. SpringMVC 请求…

MySQL 实验1:Windows 环境下 MySQL5.5 安装与配置

MySQL 实验1&#xff1a;Windows 环境下 MySQL5.5 安装与配置 目录 MySQL 实验1&#xff1a;Windows 环境下 MySQL5.5 安装与配置一、MySQL 软件的下载二、安装 MySQL三、配置 MySQL1、配置环境变量2、安装并启动 MySQL 服务3、设置 MySQL 字符集4、为 root 用户设置登录密码 一…

【华为欧拉】国产OpenEuler服务器系统安装以及图形界面

openEuler下载 | openEuler ISO镜像 | openEuler社区官网 下载安装iso 本次选择4G的社区版本 安装&#xff0c;复制到光盘&#xff0c;光盘引导安装。虚拟机安装&#xff0c;准备好iso文件引用&#xff0c;指定好安装源&#xff0c;安装界面和centOS基本一样。选择最小安装就…

代码随想录算法训练营第三十天|491. 非递减子序列,46. 全排列,47. 全排列 II,332. 重新安排行程,51. N 皇后,37. 解数独

491. 非递减子序列&#xff0c;46. 全排列&#xff0c;47. 全排列 II&#xff0c;332. 重新安排行程&#xff0c;51. N 皇后&#xff0c;37. 解数独 491. 非递减子序列46. 全排列47. 全排列 II332. 重新安排行程51. N 皇后37. 解数独 491. 非递减子序列 给你一个整数数组 nums…

友思特方案 | FantoVision边缘计算:嵌入式视觉系统如何实现“更快 更高 更强”?

导读 便于集成的嵌入式视觉系统一直以来面临着带宽、内存、算力三个方面的挑战。友思特 FantoVision 边缘计算设备拥有更快的处理速度和更高的带宽选择&#xff0c;其开放式架构有效突破了上述三重阻碍。 嵌入式视觉 嵌入式视觉是传统机器视觉衍生出来的子集&#xff0c;嵌入…

k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

目录 1 PV 与 PVC 介绍 1.1 PersistentVolume&#xff08;持久卷&#xff0c;简称PV&#xff09; 1.2 PersistentVolumeClaim&#xff08;持久卷声明&#xff0c;简称PVC&#xff09; 1.3 使用了PV和PVC之后&#xff0c;工作可以得到进一步的细分&#xff1a; 2 持久卷实验配置…

UE5运行时动态加载场景角色动画任意搭配-相机及运镜(二)

通过《MMD模型及动作一键完美导入UE5》系列文章,我们可以把外部场景、角色、动画资产导入UE5,接下来我们将实现运行时动态加载这些资产,并任意组合搭配。 1、运行时播放相机动画 1、创建1个BlueprintActor,通过这个蓝图动态创建1个LevelSequence,并Play 2、将这个Bluep…

Verdin AM62使用CODESYS

By Toradex 胡珊逢 简介 CODESYS 是基于 IEC 61131-3 的 PLC 开发工具&#xff0c;在工业控制、交通等领域中有着广泛的应用。文章将介绍如何在 Toradex 采用 TI AM62 SoC 的 Arm 计算机模块 Verdin AM62 使用评估版本的 CODESYS。 硬件介绍 Verdin AM62使用 TI AM623/AM625…

打卡第四天 P1081 [NOIP2012 提高组] 开车旅行

今天是我打卡第四天&#xff0c;做个省选/NOI−题吧(#^.^#) 原题链接&#xff1a;[NOIP2012 提高组] 开车旅行 - 洛谷 题目描述 输入格式 输出格式 输入输出样例 输入 #1 4 2 3 1 4 3 4 1 3 2 3 3 3 4 3 输出 #1 1 1 1 2 0 0 0 0 0 输入 #2 10 4 5 6 1 …

✨机器学习笔记(七)—— 交叉验证、偏差和方差、学习曲线、数据增强、迁移学习、精确率和召回率

机器学习笔记&#xff08;七&#xff09; 1️⃣评估模型&#x1f397;️使用测试集评估模型&#x1f397;️交叉验证集&#xff08;cross validation&#xff09; 2️⃣偏差和方差&#xff08;Bias / Variance&#xff09;3️⃣学习曲线&#xff08;Learning curves&#xff09…