`
qindongliang1922
  • 浏览: 2197182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117920
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126326
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60279
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71623
社区版块
存档分类
最新评论

Neo4j的查询语法笔记(二)

阅读更多


cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目
基本开发完毕,后面会陆续总结学习一下neo4j相关的知识。今天接着上篇文章来看下neo4j的cpyher查询的一些基本概念和语法。


#### 一,Node语法

在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下:

1,() 代表匹配任意一个节点

2, (node1) 代表匹配任意一个节点,并给它起了一个别名

3, (:Lable) 代表查询一个类型的数据

4, (person:Lable) 代表查询一个类型的数据,并给它起了一个别名

5, (person:Lable {name:"小王"}) 查询某个类型下,节点属性满足某个值的数据

6, (person:Lable {name:"小王",age:23}) 节点的属性可以同时存在多个,是一个AND的关系



#### 二,关系语法

关系用一对-组成,关系分有方向的进和出,如果是无方向就是进和出都查询

1,-->   指向一个节点

2,-[role]-> 给关系加个别名

3,-[:acted_in]-> 访问某一类关系

4,-[role:acted_in]-> 访问某一类关系,并加了别名

5,-[role:acted_in {roles:["neo","hadoop"]}]->

访问某一类关系下的某个属性的关系的数据

#### 三,模式语法

模式语法是节点和关系查询语法的结合,通过模式语法我们可以进行我们想要的任意复杂的查询
(p1: Person:Actor {name:"tom"})-[role:acted_in {roles:["neo","actor"]}]-(m1:Movie {title:"water"})


#### 四, 模式变量

为了增加模块化和减少重复,cypher允许把模式的结果指定在一个变量或者别名中,方便后续使用或操作

path = (: Person)-[:ACTED_IN]->(:Movie)

path是结果集的抽象封装,有多个函数可以直接从path里面提取数据如:

nodes(path):提取所有的节点

rels(path): 提取所有的关系  和relationships(path)相等

length(path): 获取路径长度


#### 五,条件

cypher语句也是由多个关键词组成,像SQL的
select name, count(*) from talbe where age=24 group by name having count(*) >2  order by count(*) desc 

多个关键字组成的语法,cypher也非常类似,每个关键词会执行一个特定的task来处理数据

match: 查询的主要关键词

create: 类似sql里面的insert

filter,project,sort,page等都有对应的功能语句

通过组合上面的一些语句,我们可以写出非常强大复杂的语法,来查询我们想要检索的内容,cypher会
自动解析语法并优化执行。


一些实际的用法例子:


#### 1,创建
create (:Movie {title:"驴得水",released:2016})  return p;

执行成功,在neo4j的web页面我们能看到下面的信息

+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 2
Labels added: 1


当然cypher也可以一次创建多个数据,并同时添加关系


#### 2,查询

match (p: Person) return p; 查询Person类型的所有数据

match (p: Person {name:"sun"}) return p; 查询名字等于sun的人

match( p1: Person {name:"sun"} )-[rel:friend]->(p2)  return p2.name , p2.age 查询sun的朋友的名字和年龄


match (old) ...  create (new)  create (old)-[rel:dr]->(new)  return new 对已经存在的节点和新建的节点建立关系


#### 3,查询或更新

merge 语法可以对已经存在的节点不做改变,对变化的部分会合并

MERGE (m:Movie { title:"Cloud Atlas" })
ON CREATE SET m.released = 2012
RETURN m


merge   ....  on   create  set   ... return 语法支持合并更新


#### 4,筛选过滤

cypher过滤也是用的和SQL一样的关键词where

match (p1: Person) where p1.name="sun" return p1;

等同下面的

match (p1: Person {name:"sun"}) return p1

注意where条件里面支持 and , or ,xor,not等boolean运算符,在json串里面都是and


除此之外,where里面查询还支持正则查询
match (p1: Person)-[r:friend]->(p2: Person) 
where p1.name=~"K.+" or p2.age=24 or "neo" in r.rels 
return p1,r,p2


关系过滤匹配使用not
MATCH (p:Person)-[:ACTED_IN]->(m)
WHERE NOT (p)-[:DIRECTED]->()
RETURN p,m


#### 5,结果集返回

MATCH (p:Person)
RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name,
  label:head(labels(p))} AS person



结果集返回做去重
  
match (n) return distinct n.name;



#### 6,聚合函数

cypher支持count,sum,avg,min,max

match (: Person) return count(*)

聚合的时候null会被跳过
count 语法 支持 count( distinct role )
MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person)
RETURN actor,director,count(*) AS collaborations


#### 7,排序和分页

MATCH (a:Person)-[:ACTED_IN]->(m:Movie)
RETURN a,count(*) AS appearances
ORDER BY appearances DESC SKIP 3 LIMIT 10;


#### 8, 收集聚合结果
MATCH (m:Movie)<-[:ACTED_IN]-(a:Person)
RETURN m.title AS movie, collect(a.name) AS cast, count(*) AS actors


#### 9, union 联合

支持两个查询结构集一样的结果合并
MATCH (actor:Person)-[r:ACTED_IN]->(movie:Movie)
RETURN actor.name AS name, type(r) AS acted_in, movie.title AS title
UNION (ALL)
MATCH (director:Person)-[r:DIRECTED]->(movie:Movie)
RETURN director.name AS name, type(r) AS acted_in, movie.title AS title

#### 10, with

with语句给cypher提供了强大的pipeline能力,可以一个或者query的输出,或者下一个query的输入
和return语句非常类似,唯一不同的是,with的每一个结果,必须使用别名标识。

通过这个功能,我们可以轻而易举的做到在查询结果里面在继续嵌套查询。
MATCH (person:Person)-[:ACTED_IN]->(m:Movie)
WITH person, count(*) AS appearances, collect(m.title) AS movies
WHERE appearances > 1
RETURN person.name, appearances, movies

注意在SQL里面,我们想过滤聚合结果,需要使用having语句但是在cypher里面我们可以配合with语句使用
where关键词来完成过滤


#### 11,添加约束或者索引

唯一约束(使用merge来实现)
CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE

添加索引(在图谱遍历时,快速找到开始节点),大幅提高查询遍历性能
CREATE INDEX ON :Actor(name)



添加测试数据:
CREATE (actor:Actor { name:"Tom Hanks" }),(movie:Movie { title:'Sleepless IN Seattle' }),
  (actor)-[:ACTED_IN]->(movie);

使用索引查询:
 MATCH (actor:Actor { name: "Tom Hanks" })
RETURN actor;


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。



0
4
分享到:
评论

相关推荐

    全面汇总:Django框架的学习路径、资源及应用场景

    本文汇集了丰富的Django学习资源及其配套工具。首先推荐了官方文档作为最权威的基础学习资料,然后列出GitHub仓库以查阅源码和技术动向,官方论坛则为开发者之间的交流互动提供场所。此外还推荐了如Django Girls教程、MDN教程以及Real Python的多份在线材料,这些内容由浅入深地指导学习者掌握建站技术和架构知识。为了便于实际项目搭建,文中介绍了众多第三方工具比如DRF(Django REST framework)用于创建Web API;针对开发者社区的需求列出了中文社区和其他知名的英文站点,并提到了三本不同侧重点的书籍帮助深入学习。对于环境搭建和运维管理也给出了一些建议性解决方案,如Heroku等平台来完成服务器上的部属。最后给出了PyCharm这类集成开发环境中专属于Django框架的支持特性。

    环境:c++ QT开发 项目:信息管理系统,Tcp协议传输文件信息.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料,勿用于商业用途。质量优质,放心下载使用。

    Comsol光栅非对称传输特性研究与应用,基于Comsol光栅的非对称传输原理与实验研究,Comsol光栅非对称传输 ,Comsol; 光栅; 非对称传输,Comsol光栅非对称传输效应

    Comsol光栅非对称传输特性研究与应用,基于Comsol光栅的非对称传输原理与实验研究,Comsol光栅非对称传输。 ,Comsol; 光栅; 非对称传输,Comsol光栅非对称传输效应

    阶梯碳交易机制下的电制氢综合能源系统热电优化:CPLEX求解的低碳经济运行策略研究,基于阶梯型碳交易机制与电制氢的综合能源系统热电优化策略:低碳经济下的IES运行优化与CPLEX求解应用,MATLAB

    阶梯碳交易机制下的电制氢综合能源系统热电优化:CPLEX求解的低碳经济运行策略研究,基于阶梯型碳交易机制与电制氢的综合能源系统热电优化策略:低碳经济下的IES运行优化与CPLEX求解应用,MATLAB代码:考虑阶梯型碳交易机制与电制氢的综合能源系统热电优化,CPLEX+Yalmip求解 主要内容:双碳”背景下,为提高能源利用率,优化设备的运行灵活性,进一步降低综合能源系统(IES)的碳排放水平,提出一种IES低碳经济运行策略。 首先考虑IES参与到碳交易市场,引入阶梯式碳交易机制引导IES控制碳排放;接着细化电转气(P2G)的两阶段运行过程,引入电解槽、甲烷反应器、氢燃料电池(HFC)替传统的P2G,研究氢能的多方面效益;最后提出热电比可调的热电联产、HFC运行策略,进一步提高IES的低碳性与经济性。 基于此,构建以购能成本、碳排放成本、弃风成本最小的低碳经济运行目标,将原问题转化为混合整数线性问题,运用CPLEX商业求解器进行求解,通过设置多个运行情景,对比验证了所提策略的有效性。 优势:代码注释清晰,达到了理论与代码的契合 [红旗][钉子][红旗]联系留邮箱即可 ,关键词: 1

    计算机视觉领域OpenCV库的技术资源汇总及其应用入门指南

    本文全面介绍了OpenCV这一广泛应用于图像处理、视频分析和物体检测的开源计算机视觉库。从官方资源链接入手,为使用者提供了获取最新版本、官方文档以及示例代码等多方位的支持。接着列出了从新手到专家级别的教程网站、专注于不同语言接口的学习资料如Python接口,并提及了几本对深入了解OpenCV有益的专著。此外,还针对不同的开发环境给出了安装指导并罗列了一些扩展工具如Contrib模块。同时强调了与其他技术栈如TensorFlow集成的方式来进行复杂视觉任务处理的方法,指出了几个活跃的社区和论坛方便遇到难题时寻求外部的帮助,最后列出了一系列视频教程和关于性能调优的建议,旨在让用户更快更好地利用好这个强大的库。

    【weixin9289】基于微信小程序的大学生科技竞赛管理系统的设计与实现+springboot.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    基于CNN模型的焊接匙孔熔透状态的分类识别及PB模型生成.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料,勿用于商业用途。质量优质,放心下载使用。

    基于Vue框架的篮球项目官网设计源码

    本项目是一款基于Vue框架的篮球项目官网设计源码,包含80个文件,涵盖29个PNG图片、14个字体文件(ttf/otf)、7个JavaScript文件、5个JPG图片以及若干CSS、HTML、JSON等其他类型文件。该官网旨在提供篮球项目的全面信息展示,适用于各类篮球爱好者及组织。

    【weixin9203】婚庆摄影小程序ssm.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    python基于自然语言处理技术的话题文本分类的研究(完整前后端+mysql+说明文档+LW+PPT)

    目前,文本的分类依然是话题处理过程中非常重要的一个环节,在话题分类环节中,需要通过提高文本分类的性能,从而实现对热点话题的任务进行有效分类的目的。而自然语言在对于文本分类的应用上有着非常强大的分类效果,是现在常用的一种分类方式。 本次就是结合了python技术来搭建一款基于自然语言的话题分类网站,在该网站中通过搜索相关的信息关键词就可以查找到具体的新闻内容,并且可以实现对新闻的评分和阅读等操作。此次设计是对文本话题分类的一次有效的尝试,对于当下复杂的网络信息环境下,进行有效的分类可以提高对信息的查找准确度,对于信息的过滤有着非常重要的作用。 关键词:自然语言;话题分类;python语言

    DeepSeek写的数字华容道手机小游戏

    使用DeepSeek写的数字华容道小游戏,可以直接用手机浏览器打开进行游戏操作。

    C++并发编程实战 介绍

    C++并发编程实战 介绍

    神经网络及深度学习领域的综合性学习指南和资源列表

    本文献提供了一份面向神经网络与深度学习领域的全面资源目录,涵盖了六个主要方面:学习材料如书籍和在线课程为初学者提供了系统的学习路径;工具和框架推荐了当下最受欢迎的一线平台如TensorFlow, PyTorch,以辅助开发者构建复杂的模型;各种类型的视觉化工具能够协助研究者更好地理解和调试网络结构;社区交流与参与对于提升专业知识和个人技能非常重要,因此罗列了一些活跃的技术讨论群组;同时收集了大量的权威研究出版渠道如arXiv以及顶尖会议信息帮助用户掌握前沿科技动态;最后还涉及到了实验环境中所需的实践环境与高级应用技巧等内容。

    【weixin9071】基于微信小程序的汽车预约维修系统+ssm.zip

    技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    101,103,104规约工具

    101,103,104规约解析,链接工具

    基于Vue框架的工程管控2.0前端Vue.js TypeScript JavaScript CSS HTML设计源码

    该Vue框架驱动的工程管控2.0前端项目,包含了841个文件,涵盖丰富的组件和资源,其中SVG图形379个,Vue组件190个,TypeScript脚本92个,JavaScript脚本68个,CSS样式49个,JSON配置11个,HBS模板10个,PNG图片9个,SCSS样式8个,OTF字体5个。项目源码以TypeScript和JavaScript为主,辅以CSS和HTML,旨在提供一个全面的前端解决方案。

    第三天solidity入门.pdf

    第三天solidity入门

    nodejs+vue电影交流网站源码-说明文档资料.zip

    管理员登陆系统后,可以查看首页、个人中心、用户管理、电影信息管理、电影分类管理、交流论坛、系统管理等功能。

    微电网智能分层控制架构下的二次控制、集中式与分布式协调控制策略,结合事件触发机制,运行效果卓越,微电网分层控制策略:二次控制、集中与分布式协调控制及事件触发的良好运行效果,微电网分层控制中二次控制,集

    微电网智能分层控制架构下的二次控制、集中式与分布式协调控制策略,结合事件触发机制,运行效果卓越,微电网分层控制策略:二次控制、集中与分布式协调控制及事件触发的良好运行效果,微电网分层控制中二次控制,集中控制,分布式协调控制,事件触发,运行效果良好 ,二次控制; 集中控制; 分布式协调控制; 事件触发; 运行效果良好,微电网智能控制策略:二次控制与协调控制实现良好运行效果

    ASP.NET多功能聊天软件的设计与开发-文字聊天文件传输模块(源代码+论文)

    ASP.NET多功能聊天软件的设计与开发——文字聊天文件传输模块(源代码+论文)

Global site tag (gtag.js) - Google Analytics