当前位置: 首页 > news >正文

Cypher语句查询neo4j数据库教程

文章目录

        • Cypher介绍
        • 执行Cypher语句查询
        • 总结

Cypher介绍

NodeMatcherRelationshipMatcher能够表达的匹配条件相对简单,更加复杂的查询还是需要用Cypher语句来表达。

Py2neo本身支持执行Cypher语句的执行,可以将复杂的查询写成Cypher语句,通过graph.run方法查询,返回的结果可以转化为pandas.DataFrame或者pandas.Series对象,从而和其他数据分析工具无缝衔接。

执行Cypher语句查询
  1. 查询某类所有节点
cypher_ = "MATCH (n:person) RETURN n.name as name"df = graph.run(cypher_).to_data_frame() # pd.DataFrame
df
	name
0	周杰伦
1	蔡依林
2	方文山
3	洪荣宏
4	杨瑞代
5	黄淩嘉
6	徐若瑄
7	许世昌
8	梁心颐
9	宋健彰
10	张惠妹
11	李玟
12	天台 声带
13	黄俊郎
14	陈镇川
15	古小力
16	袁咏琳
17	刘畊宏
18	弹头
19	李心艾
20	黄婕熙
21	罗宇轩
22	李汪哲
23	邱凯伟
24	杨常青
25	曾郁婷
26	毛毛
27	唐从圣
28	费玉清
29	黄凌嘉
30	陈奕迅
31	魏如昀
32	南拳妈妈
33	宇豪
34	许茹芸
35	齐秦
36	吴宗宪
37	温岚
38	潘儿

查询所有专辑

cypher_ = "MATCH (n:album) RETURN n.name as name"df = graph.run(cypher_).to_data_frame() # pd.DataFrame
df
	name
0	惊叹号
1	周杰伦的床边故事
2	恋花
3	跨时代
4	12新作
5	叶惠美
6	范特西
7	八度空间
8	依然范特西
9	最伟大的作品
10	看我7211	我很忙
12	天台爱情
13	Promise
14	魔杰座
15	Jay
16	寻找周杰伦
17	十一月的萧邦
18	11月的萧邦
19	七里香
20	城堡
21	袁咏琳 Cindy
22	哎呦,不错哦
23	浪花兄弟
24	Lucky Number
25	回想曲青青校树
26	范特西PLUS
27	认了吧
28	乐酷·概念合辑
29	南拳妈妈的夏天
30	真爱无敌
31	哎哟,不错哦
32	有点野
33	给你的情书
34	2007世界巡回演唱会
35	温式效应
  1. 查询某个节点的路径为2的所有路径
cypher_ = "MATCH P=(a)-[*2]-(b)\
WHERE a.name='蔡依林'\
RETURN P"relationship = graph.run(cypher_)
for rel in relationship:print(rel)
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='Dare for more'), Node('person', name='蔡依林')), 歌手(Node('song', name='Dare for more'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='布拉格广场'), Node('person', name='蔡依林')), 歌手(Node('song', name='布拉格广场'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='布拉格广场'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='布拉格广场'), Node('album', name='看我72变')))
Path(Node('person', name='蔡依林'), 歌手(Node('album', name='看我72变'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='布拉格广场'), Node('album', name='看我72变')))
Path(Node('person', name='蔡依林'), 歌手(Node('album', name='看我72变'), Node('person', name='蔡依林')), 歌手(Node('album', name='看我72变'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('album', name='看我72变'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='骑士精神'), Node('album', name='看我72变')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='海盗'), Node('person', name='蔡依林')), 作词(Node('song', name='海盗'), Node('person', name='陈镇川')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='海盗'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='海盗'), Node('album', name='城堡')))
Path(Node('person', name='蔡依林'), 歌手(Node('person', name='蔡依林'), Node('album', name='城堡')), 所属专辑(Node('song', name='海盗'), Node('album', name='城堡')))
Path(Node('person', name='蔡依林'), 歌手(Node('person', name='蔡依林'), Node('album', name='城堡')), 作词(Node('person', name='陈镇川'), Node('album', name='城堡')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='你怎么连话都说不清楚'), Node('person', name='蔡依林')), 作词(Node('song', name='你怎么连话都说不清楚'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='你怎么连话都说不清楚'), Node('person', name='蔡依林')), 作词(Node('song', name='你怎么连话都说不清楚'), Node('person', name='毛毛')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='你怎么连话都说不清楚'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='你怎么连话都说不清楚'), Node('album', name='Lucky Number')))
Path(Node('person', name='蔡依林'), 作词(Node('person', name='蔡依林'), Node('person', name='毛毛')), 作词(Node('song', name='你怎么连话都说不清楚'), Node('person', name='毛毛')))
Path(Node('person', name='蔡依林'), 作词(Node('person', name='蔡依林'), Node('person', name='毛毛')), 作词(Node('person', name='周杰伦'), Node('person', name='毛毛')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='骑士精神'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='骑士精神'), Node('album', name='看我72变')))
(蔡依林)<-[:歌手 {}]-(Dare for more)-[:歌手 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(布拉格广场)-[:歌手 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(布拉格广场)-[:所属专辑 {}]->(看我72)
(蔡依林)<-[:歌手 {}]-(看我72)<-[:所属专辑 {}]-(布拉格广场)
(蔡依林)<-[:歌手 {}]-(看我72)-[:歌手 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(看我72)<-[:所属专辑 {}]-(骑士精神)
(蔡依林)<-[:歌手 {}]-(海盗)-[:作词 {}]->(陈镇川)
(蔡依林)<-[:歌手 {}]-(海盗)-[:所属专辑 {}]->(城堡)
(蔡依林)-[:歌手 {}]->(城堡)<-[:所属专辑 {}]-(海盗)
(蔡依林)-[:歌手 {}]->(城堡)<-[:作词 {}]-(陈镇川)
(蔡依林)<-[:歌手 {}]-(你怎么连话都说不清楚)-[:作词 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(你怎么连话都说不清楚)-[:作词 {}]->(毛毛)
(蔡依林)<-[:歌手 {}]-(你怎么连话都说不清楚)-[:所属专辑 {}]->(Lucky Number)
(蔡依林)-[:作词 {}]->(毛毛)<-[:作词 {}]-(你怎么连话都说不清楚)
(蔡依林)-[:作词 {}]->(毛毛)<-[:作词 {}]-(周杰伦)
(蔡依林)<-[:歌手 {}]-(骑士精神)-[:所属专辑 {}]->(看我72)
  1. 查询周杰伦的所有专辑
cypher_ = "MATCH (n:album)-[r]->(m:person) \
where m.name = '周杰伦'\
RETURN type(r) AS type,n.name AS name"album_person = graph.run(cypher_)
for ap in album_person:print(ap)
'歌手'	'七里香'
'歌手'	'浪花兄弟'
'歌手'	'恋花'
'歌手'	'跨时代'
'歌手'	'12新作'
'歌手'	'周杰伦的床边故事'
'歌手'	'叶惠美'
'歌手'	'范特西'
'歌手'	'八度空间'
'歌手'	'依然范特西'
'歌手'	'最伟大的作品'
'歌手'	'看我72变'
'歌手'	'我很忙'
  1. 查询具体两个人的路径在4以内的关系
cypher_ = "MATCH path=(m:person)-[:作词 *1..4]->(n:person) \
WHERE m.name='周杰伦' AND n.name='徐若瑄' \
RETURN path"s = graph.run(cypher_)for l in s:print(l.values()[0])
(周杰伦)-[:作词 {}]->(徐若瑄)
(周杰伦)-[:作词 {}]->(方文山)-[:作词 {}]->(周杰伦)-[:作词 {}]->(徐若瑄)

手动写出path路径的关系网
Path是一个比较复杂的结构,Path中的节点和关系分别用nodesrelationships表示,并且是按照路径上节点和关系的顺序分别存放的。

cypher_ = "MATCH path=(m:person)-[:作词 *1..4]->(n:person) \
WHERE m.name='周杰伦' AND n.name='徐若瑄' \
RETURN path"
s = graph.run(cypher_)for path in s:# 直接打印pathprint(path)# 获取路径中的节点和关系nodes = path.nodesrelationships = path.relationships   # 自己组织路径文本path_text = ""for n,r in zip(nodes, relationships):# 每次加入一个节点和一个关系的类型path_text += "{} - {} - ".format(n['name'], type(r).__name__)# 别忘了最后一个节点path_text += nodes[-1]['name'] + '\n'print(path_text)
总结

使用Py2neo查询Neo4j中的节点、关系和路径时,条件简单的查询可以通NodeMatcherRelationshipMatcher来实现。而较为复杂的查询,可以写成Cypher语句来查询,查询结果可以转化为pandasDataFrame或者Series数据类型,与其他数据分析工具结合。

相关文章:

Cypher语句查询neo4j数据库教程

文章目录 Cypher介绍执行Cypher语句查询总结 Cypher介绍 NodeMatcher和RelationshipMatcher能够表达的匹配条件相对简单&#xff0c;更加复杂的查询还是需要用Cypher语句来表达。 Py2neo本身支持执行Cypher语句的执行&#xff0c;可以将复杂的查询写成Cypher语句&#xff0c;…...

【ESP32 IDF快速入门】点亮第一个LED灯与流水灯

文章目录 前言一、有哪些工作模式&#xff1f;1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、GPIO操作函数2.1 GPIO 汇总2.2 GPIO操作函数gpio_config配置引脚reset 引脚函数设置引脚电平选中对应引脚设置引脚的方向 2.3 点亮第一个灯 三、流水灯总结 前言 ESP32…...

再见,Visual Basic——曾经风靡一时的编程语言

2020年3月&#xff0c;微软团队宣布了对Visual Basic&#xff08;VB&#xff09;的“终审判决”&#xff1a;不再进行开发或增加新功能。这意味着曾经风光无限的VB正式退出了历史舞台。 VB是微软推出的首款可视化编程软件&#xff0c;自1991年问世以来&#xff0c;便受到了广大…...

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…...

【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”

我们在做ArcGIS Engine二次开发时&#xff0c;特别是新手&#xff0c;安装好了开发环境&#xff0c;满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后&#xff0c;却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…...

新项目,Linux上一键安装MySQL,Redis,Nacos,Minio

大家好&#xff0c;我是 jonssonyan 分享一个我的一个开源项目&#xff0c;这是一个在 Linux 平台上一键安装各种软件的脚本项目&#xff0c;脚本使用 Shell 语言编写&#xff0c;后续还会增加更多软件的一键安装&#xff0c;代码在 GitHub 上全部开源的&#xff0c;开源地址如…...

Rust 从 PyTorch 到 Burn

一、性能轮盘赌 机器码相同&#xff0c;但放置在不同的地址上&#xff0c;性能可能截然不同。 作为软件开发人员&#xff0c;我们经常假设特定代码的性能仅由代码本身和运行它的硬件决定。这种假设让我们在优化代码以获得更好性能时感到有控制力。虽然在大多数情况下这种假设…...

Swin-Transformer网络代码实现

还是参考导师级别博主霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 博主写的博客Swin-Transformer网络结构详解_swin transformer-CSDN博客 视频理论讲解12.1 Swin-Transformer网络结构详解_哔哩哔哩_bilibili pytorch实现12.2 使用Pytorch搭建Swin-Transformer网…...

Java ZooKeeper-RocketMQ 面试题

Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab协议&#xff09;3、谈谈你对分布式锁的理解&#xff0c;以及分布式锁的实现&#xff1f;4、 zookeeper 是如何保证事务的顺序一致性的&#xff1f;5、 zook…...

css制作瀑布流布局

CSS制作瀑布流布局的步骤如下&#xff1a; HTML结构&#xff1a;使用无序列表ul和列表项li来创建网格布局。 <ul class"grid"><li><img src"image1.jpg"></li><li><img src"image2.jpg"></li><li…...

Redis 的哨兵模式配置

1.配置 vim sentinel.conf# mymaster 给主机起的名字 # 192.168.205.128 主机的ip地址 # 6379 端口号 # 2 当几个哨兵发现主观宕机&#xff0c;则判定为客观宕机。 原则上是大于一半。比如三个哨兵&#xff0c;则设置为 2 sentinel monitor mymaster 192.168.205.128 63…...

基于单片机的继电器参数测试系统设计

摘要:由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时…...

unity 数学 空间四个点是否在同一个平面

问题&#xff1a;已知三维空间中四点A、B、C、D&#xff0c;如何知道四个点是否在同一个平面呢 首先我们知道三点确定一个平面&#xff0c;所以可以由上面四个点其中任意三点组成一个平面p&#xff08;A,B,C&#xff09;&#xff0c;另外一个点和三个任意点的形成线&#xff0…...

数据卷dockerfile

目录 一、数据卷 1. 简介 2. 数据卷和数据卷容器 1. 数据卷&#xff1a; 2. 数据卷容器&#xff1a; 二、自定义镜像 1. 作用 2. 自定义centos 3. 自定义tomcat8 一、数据卷 1. 简介 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;它将主机操作系统目录直…...

AOP的介绍与使用

文章目录 AOP的概念AOP术语AOP的实现AspectJSpring AOP Spring AOP原理JDK动态代理CGLib动态代理 SpringAOP代码编写规则自定义切面自定义切点自定义通知在通知中获取当前请求代码实例 一些选择题 AOP的概念 • Aspect Oriented Programing&#xff0c;即面向方面&#xff08;…...

金融行业专题|期货超融合架构转型与场景探索合集(2023版)

更新内容&#xff1a; 更新 SmartX 超融合在期货行业的覆盖范围、部署规模与应用场景。新增 CTP 主席系统实践与评测、容器云资源池等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎下载阅读电子书《SmartX 金融核心生产业务场景探索文章合集》。 面对不断变…...

08 yum和git

什么是软件包 安装软件&#xff0c;一个通常的办法就是下载程序的源代码进行编译。这种太麻烦&#xff0c;于是一些人把常用软件编译好&#xff0c;做成软件包放在服务器上&#xff0c;通过包管理器可以很方便的得到这个软件包安装&#xff0c;就好比手机上的应用商店 yum&am…...

JMeter元件和采样器一览

Apache JMeter是一个强大的开源负载测试工具&#xff0c;用于性能和功能测试。JMeter提供了丰富的元件和采样器&#xff0c;使得它能够模拟复杂的测试场景和高并发的用户请求。以下是JMeter中常用的一些元件和采样器的介绍和讲解&#xff1a; 测试计划元件 测试计划&#xff0…...

BF算法的优化之SPFA算法

介绍 全称Shortest Path Faster Algorithm. 优化思想&#xff1a; 1.由int path[maxn]定义的记录最短距离的容器&#xff0c;只有在path[i]value<path[j]时才会更新&#xff0c;它们两者的值相等时path的值仍保持不变。由此优化容器&#xff0c;选择用一个队列来替path数…...

java 基础(核心知识搭配代码)

前言 java的学习分为了上部分以及下部分进行学习&#xff0c;上部分就是对于java的基础知识&#xff0c;面向对象上&#xff0c;面向对象下&#xff0c;异常操作&#xff0c;javaApi&#xff1b;下部主要是集合&#xff0c;泛型&#xff0c;反射&#xff0c;IO流&#xff0c;J…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...