初识Neo4j之Cypher(三)

目录

一、介绍

二、语法

1、节点

2、关系

3、属性

4、模式


一、介绍

        Cypher 是 Neo4j 的声明式查询语言,兼容 GQL 标准。通过 openCypher 项目,Cypher 以开源方式提供。它类似于 SQL,但专为图数据优化。

        Cypher 直观且接近自然语言,它采用类似 ASCII 艺术风格的语法,以可视化的方式来匹配模式和关系:

(:nodes)-[:ARE_CONNECTED_TO]->(:otherNodes)

圆括号用于表示 (:Nodes),而 -[:ARROWS]→ 用于表示 (:Nodes) 之间的关系。通过这种查询语法,你可以对图进行创建、读取、更新或删除(CRUD)操作。

二、语法

上图表示:“Sally喜欢图表。萨莉和约翰是朋友。萨莉为Neo4j工作。”

用Cypher写同样的信息:

(:Sally)-[:LIKES]->(:Graphs)
(:Sally)-[:IS_FRIENDS_WITH]->(:John)
(:Sally)-[:WORKS_FOR]->(:Neo4j)

1、节点

        在属性图模型中,主要的组成部分是节点和关系。节点通常用来表示数据模型中的名词或对象。在前面的例子中,Sally、John、Graphs 和 Neo4j 都是节点。在 Cypher 中,你可以用括号将节点括起来来表示它,例如 (node)。这些括号对应于可视化中构成节点的圆圈。

1)节点标签

        节点可以通过标签进行分组,用户能够指定要查找或创建的特定类型的实体。标签还帮助 Cypher 区分不同的实体,并优化查询的执行效率。在这个例子中,Sally 和 John 都可以归为 Person标签,Graphs 可以加上 Technology标签,Neo4j 则可以标记为 Company标签。

        在关系数据库上下文中,这相当于告诉SQL在哪个表中查找特定的行。就像让SQL从person表中查询一个人的信息一样,用户也可以让Cypher只检查该信息的person标签。(如果没有为Cypher指定一个标签来过滤不匹配的节点类别,查询将检查数据库中的所有节点。在非常大的图数据中,这可能会影响性能。)

2)节点变量
        这里有必要将匹配到的数据实体绑定到变量,以便在后续的子句中引用它们。变量可以是单个字母或单词,并且应当用小写字母书写。例如,如果你想把所有带有 Person 标签的节点绑定到变量 p,可以写作 (p:Person)。

MATCH (p:Person)
RETURN p

2、关系

        图数据库的一个优点是,你可以以关系的形式存储元素(节点)之间是如何关联的信息。在 Cypher 中,关系用方括号和一个箭头来表示,连接两个节点(例如 (Node1)-[]→(Node2))。在例子中,包含 :LIKES、:IS_FRIENDS_WITH 和 :WORKS_FOR 的线条,表示节点之间的关系。

        关系类型前面一定要加上冒号。如果忘记加冒号,写成 (:Person)-[LIKES]->(:Technology),那么 [LIKES] 就表示一个关系变量,而不是关系类型。

举例:

  • (:Person)-[:LIKES]->(:Technology)
    这里 :LIKES 表示一种关系类型,查询的是“喜欢”这种关系。

  • (:Person)-[LIKES]->(:Technology)
    这里 LIKES 没有冒号,Cypher 会把它当作一个关系变量(可以起任意名字,不一定叫 LIKES),而不是“喜欢”这种类型的关系。因此,这种写法只能匹配任何类型的关系,然后把这条关系赋值给变量 LIKES。

1)关系方向

        关系总是具有方向性的,这通过箭头来表示。

(1)从左到右:

(p:Person)-[:LIKES]->(t:Technology)

(2)从右到左:

(p:Person)<-[:LIKES]-(t:Technology)

(3)无方向的:

MATCH (p:Person)-[:LIKES]-(t:Technology)

2)无方向关系

        无方向的关系并不意味着关系本身没有方向,而是指在查询时可以从任意方向遍历。用户不能创建没有方向的关系,但在查询时可以以无方向的方式进行。

        在查询中使用无方向关系特别适用于不知道关系方向的情况,因为如果用错方向写查询,Cypher 是不会返回任何结果的。因此,Cypher 会检索所有通过指定关系类型连接的节点,无论其方向如何。

注:因为查询中的无向关系被遍历两次(每个方向一次),相同的模式将返回两次。这可能会影响查询的性能。

3)关系类型

        关系类型对关系进行分类并赋予其含义,类似于标签对节点的分组。按最佳实践,关系类型通常使用动词或其变体。关系类型描述了节点之间是如何关联的。这样,Cypher 查询语言几乎就像自然语言一样,节点是主语和宾语(名词),而关系(动词)则是连接它们的动作词。

在前面的例子中,关系类型有:

[:LIKES] —— 表示 Sally(一个节点)喜欢 graphs(另一个节点)。

[:IS_FRIENDS_WITH] —— 表示 Sally 和 John 是朋友。

[:WORKS_FOR] —— 表示 Sally 为 Neo4j 工作。

4)关系变量

        变量在关系中可以像在节点中一样使用。一旦你为关系指定了变量,就可以在后续的查询中引用这个关系。

比如这个例子:MATCH (p:Person)-[r:LIKES]->(t:Technology) RETURN p, r, t

这个查询为节点标签(p 表示 Person,t 表示 Technology)以及关系类型(r 表示 :LIKES)都指定了变量。在 return 子句中,你就可以使用这些变量(即 p、r 和 t)来返回绑定的实体。

3、属性

        属性值既可以添加到节点,也可以添加到关系上,并且可以是多种不同的数据类型。属性用花括号{}括起来,键后面跟一个冒号,值用单引号或双引号括起来:

CREATE (p:Person {name:'Sally'})-[r:IS_FRIENDS_WITH]->(p:Person {name:'John'})
RETURN p, r

4、模式

        图模式匹配是 Cypher 的核心。它是一种通过声明式模式来在图中导航、描述和提取数据的机制。(p:Person {name: "Sally"})-[r:LIKES]->(g:Technology {type: "Graphs"}) 这段 Cypher 代码表示的是一个模式,但它并不是一个完整的查询。它仅仅表达了这样一个事实:有一个 name 属性为 Sally 的 Person 节点,通过 LIKES 关系,连接到了一个 type 属性为 Graphs 的 Technology 节点。要想基于这个模式执行实际操作,比如将它添加到图中或从图中查询出来,你需要在数据库中执行查询。

可以用 CREATE 子句将这条信息写入数据库:

CREATE (p:Person {name: "Sally"})-[r:LIKES]->(t:Technology {type: "Graphs"})

当数据已经写入数据库后,可以用如下模式将其查询出来:

MATCH (p:Person {name: "Sally"})-[r:LIKES]->(t:Technology {type: "Graphs"}) RETURN p, r, t

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

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

相关文章

19-C#静态方法与静态类

C#静态方法与静态类 1.static-静态方法animal.eat&#xff08;&#xff09;;//直接调用 public class animal {public static void eat()//定义静态方法{messagebox.show("animal eat");} }2.static-静态类animal.eat&#xff08;&#xff09;;//直接调用public stat…

基于YOLO的足球检测Web应用:从训练到部署的完整实战

用Python和深度学习技术打造一个完整的足球检测系统&#xff0c;支持图片检测、视频分析和实时监控。本文带你从零开始构建一个专业的Web应用。&#x1f3af; 项目背景 在体育赛事分析和足球训练中&#xff0c;准确识别和定位足球是一个重要需求。本项目利用YOLO深度学习算法&a…

npm 切换 node 版本 和npm的源

在开发过程中&#xff0c;不同项目可能需要不同版本的 Node.js&#xff0c;同时 于由XX原因&#xff0c;我们需要切换npm的源。这时如果需要切换node版本或者npm的源&#xff0c;我们可以使用以下方法。 使用 nvm 切换 Node 版本 1、安装 npm install nvm -g2、使用 # 列出所有…

Java学习第二十部分——EasyMock

目录 一.概述 二.作用 三.工作原理 四.使用示例 五.主要特点 六.适用场景 七.其他模拟框架比较 八.idea简单项目实战 1.打开idea创建Java项目&#xff0c;注意构建系统选“Maven” 2.为pom.xml文件添加如下依赖&#xff0c;并重新加载Maven依赖&#xff0c;直至不报错…

机器学习模型在C++平台的部署

一、概述机器学习模型的训练通常在Python环境下完成&#xff0c;而现实生产环境的复杂性和多样性使得模型的部署成为一个值得关注的重点。不同应用场景下有不同适应的实现方式&#xff0c;这里主要介绍通过一种通用中间格式——ONNX&#xff08;Open Neural Network Exchange&a…

保姆级安装 Ruby 环境下载及安装教程, RubyInstaller下载及安装教程

一、下载安装 RubyInstaller 1.打开 RubyInstaller 官网&#xff1a;https://rubyinstaller.org/ 点击跳转, 官网界面如下图&#xff1a; 点击下载最新的 RubyDevkit 版本&#xff08;如 RubyDevkit 3.4.X (x64) &#xff09;。如下图所示&#xff1a; 注意点&#xff1a;如果…

SQL 一键生成 Go Struct!支持字段注释、类型映射、结构体命名规范

SQL 一键生成 Go Struct&#xff01;支持字段注释、类型映射、结构体命名规范 在 Golang 开发中&#xff0c;尤其是操作数据库时&#xff0c;我们经常会遇到这种场景&#xff1a; ✅ 拿到数据库建表 SQL&#xff0c;却要手动写 Go struct✅ 字段几十个、类型复杂&#xff0c;…

Web 前端框架选型:React、Vue 和 Angular 的对比与实践

Web 前端框架选型&#xff1a;React、Vue 和 Angular 的对比与实践 选择前端框架就像选择一个长期合作伙伴。错误的选择可能会让你的项目在未来几年内背负沉重的技术债务&#xff0c;而正确的选择则能让开发效率飞速提升。 经过多年的项目实践&#xff0c;我发现很多新人在框架…

C# 值拷贝、引用拷贝、浅拷贝、深拷贝

值拷贝定义&#xff1a;直接复制变量的值&#xff0c;适用于基本数据类型&#xff08;如int, float, char等&#xff09;。在 C# 中&#xff0c;值类型&#xff08;基本数据类型和结构体&#xff09;默认使用值拷贝。特点&#xff1a;创建原始值的完全独立副本&#xff0c;修改…

深度学习图像分类数据集—百种鸟类识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;525种鸟类识别分类 训练数据集总共有84635张图片&#xff0c;每个文件夹…

零基础 “入坑” Java--- 八、类和对象(一)

文章目录一、初识面向对象二、类的定义和使用1.认识类2.类的定义格式三、类的实例化四、this引用五、对象的构造及初始化1.有关初始化2.构造方法3.就地初始化一、初识面向对象 Java是一门纯面向对象的语言&#xff08;OOP&#xff09;&#xff0c;在面向对象的世界里&#xff…

数字孪生技术引领UI前端设计新篇章:智能物联网的深度集成

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言&#xff1a;数字孪生与物联网的共生革命在智能设备爆发式增长的今天&#xff0c;传统…

代码审计-shiro漏洞分析

一、关于shiro介绍 简单讲&#xff0c;shiro是apache旗下的一个Java安全框架&#xff0c;轻量级简单易上手&#xff0c;框架提供很多功能接口&#xff0c;常见的身份认证 、权限认证、会话管理、Remember 记住功能、加密等等。 二、漏洞分析 1.CVE-2019-12422-shiro550 漏洞原理…

EF提高性能(查询禁用追踪)(关闭延迟加载)

EF默认是支持延迟加载的&#xff0c;在加载一个表的数据时&#xff0c;会把关联表的数据一并加载&#xff0c;这样会影响性能。 一般建议关闭延迟加载可以提高EF加载的性能。还有其他方法提高性能&#xff08;查询禁用追踪&#xff09; 如果要实现延迟加载&#xff0c;必须满足…

Leetcode+JAVA+贪心III

134.加油站在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。给定两个整数数组 gas 和 …

Qt信号与槽机制及动态调用

Qt信号与槽机制及动态调用一、信号与槽1、Qt信号与槽机制概述2、信号与槽的基本使用3、信号与槽的特性4、使用Lambda表达式作为槽5、信号与槽的参数传递6、注意事项二、动态调用机制1、基本用法2、示例代码3、带参数的调用4、返回值处理5、信号与槽的动态连接6、动态方法调用7、…

K8s系列之:Kubernetes 的 OLM

K8s系列之:Kubernetes 的 OLM 什么是 Kubernetes 的 OLM什么是Kubernetes中的OperatorOLM 的功能OLM 的核心组件OLM优势OLM 的工作原理OLM 与 OperatorHub 的关系OLM示例场景什么是CRDoperator 和 CRD的关系为什么需要 CRD 和 OperatorCRD定义资源类型DebeziumServer如何使用d…

前端-HTML-day2

目录 1、无序列表 2、有序列表 3、定义列表 4、表格-基本使用 5、表格-结构标签 6、表格-合并单元格 7、表单-input基本使用 8、表单-input占位文本 9、表单-单选框 10、表单-上传多个文件 11、表单-多选框 12、表单-下拉菜单 13、表单-文本域 14、表单-label标签…

两种方式清除已经保存的git账号密码

方式一随便选择一个文件夹&#xff0c;然后鼠标右键-》TortoiseGit ->设置选择已保存的数据-》认证数据-》清除-》点击确定方式二 控制面板\用户帐户\凭据管理器-》windows凭据普通凭据-》找到git信息-》选择删除

Using Spring for Apache Pulsar:Message Production

1. Pulsar Template在Pulsar生产者端&#xff0c;Spring Boot自动配置提供了一个用于发布记录的PulsarTemplate。该模板实现了一个名为PulsarOperations的接口&#xff0c;并提供了通过其合约发布记录的方法。这些send API方法有两类&#xff1a;send和sendAsync。send方法通过…