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

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
分享到:
评论

相关推荐

    python大学生就业信息管理系统(django(完整前后端+mysql+说明文档+LW).zip

    python大学生就业信息管理系统(django(完整前后端+mysql+说明文档+LW).zip

    基于C语言的通讯录文件管理设计源码

    该项目为基于C语言的通讯录文件管理系统设计源码,共包含40个文件,其中包括6个日志文件、5个索引文件、5个编译信息文件、2个项目文件、2个数据库文件、2个可执行文件、2个源代码文件、1个可执行文件和1个解决方案文件。系统旨在提供高效的通讯录文件管理功能。

    计算机毕业设计:基于java web的公益网站的设计.zip

    计算机科学与技术专业毕业设计项目的核心是基于 Java 与 MySQL 开发,前端运用 jQuery、HTML、CSS 等技术的源码。它涵盖供应链系统、网上书城、ERP 系统、博客系统等众多典型项目,几乎覆盖计算机专业应用的各个领域。 这些源码价值极高,能助力学生快速掌握相关技术知识,提供参考范例与创新思路。其包含完整代码、详细文档、直观演示和全面说明,帮助学生深入了解项目实现过程与技术细节。 这些珍贵的毕业设计源码,大多由学生或导师无私上传至互联网供人自由使用,形成知识共享、共同进步的生态,推动了计算机技术在教育领域的传承与发展。

    JAVA源码 + SpringBoot+vue+mysql 课程答疑系统 + 数据库 + 文档

    本课程答疑系统有管理员,老师,学生三个角色。管理员功能有,个人中心,学生管理,老师过来,科目类型管理,学生问题管理,老师回答管理,老师信息管理,关注列表管理,交流区,系统管理。学生功能有,个人中心,科目类型管理,学生问题管理,老师回答管理,老师信息管理,关注列表管理,我的收藏管理。老师功能有,个人中心,老师回答管理,老师信息管理,关注列表管理,我的收藏管理。 内含文档,可轻松上手。

    【weixin9181】基于微信小程序的乡村政务服务系统springboot.zip

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

    TRichView v23.0.1 for Delphi 11-12 Athens Full Source.7z

    TRichView v23.0.1 for Delphi 11-12 Athens Full Source.7z

    【weixin9229】学生资助在线管理软件开发微信小程序ssm.zip

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

    风光柴储微电网经济调度优化:基于Matlab的智能求解方法与环保经济双赢之道,风光柴储微电网经济调度优化研究:基于Matlab平台的求解与应用,风光柴储微电网经济调度(Matlab) 微电网优化调度作

    风光柴储微电网经济调度优化:基于Matlab的智能求解方法与环保经济双赢之道,风光柴储微电网经济调度优化研究:基于Matlab平台的求解与应用,风光柴储微电网经济调度(Matlab) 微电网优化调度作为智能电网优化的重要组成部分,对降低能耗、环境污染具有重要 意义。 微电网的发展目标既要满足电力供应的基本需求,又要提高经济效益和环境保护。 本文基于Matlab平台,使用Yalmip+Cplex对微电网进行最优化调度问题求解,调度求解的过程较为简洁方便,可修改性强。 ,微电网优化调度;风光柴储系统;经济调度;Matlab平台;Yalmip+Cplex求解;简洁方便可修改性强;环境保护。,Matlab下的风光柴储微电网经济调度优化研究

    制作PPT指南:构建高效的人工智能主题演示文稿的要素与步骤

    内容概要:本文详细介绍了制作PPT所需的基本要素与具体的结构范例。从PPT各部分构成要素出发——封面页、目录页、内容页、总结页到问答页逐一进行了阐述并给出了具体案例。以“人工智能与未来”为主题,提供了每一页可能涵盖的内容范围和结构安排,有助于提高PPT制作者对于内容规划、素材选取以及页面布局的理解。

    耳机拆机视频,可以看看

    拆机视频耶耶耶

    linux环境下Levmar-2.6编译好静态库

    linux环境下Levmar-2.6编译好静态库,测试成功

    【weixin9221】新冠肺炎服务预约微信小程序的设计与实现ssm.zip

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

    智慧产业园区解决方案Word(181页).docx

    智慧产业园区作为城市发展的新亮点,正逐步成为推动区域经济转型升级和创新增长的重要引擎。在国家数字红利持续释放和智慧城市发展环境不断优化的背景下,智慧产业园区的建设迎来了前所未有的发展机遇。从《国家新型城镇化规划(2014-2020)》到《中国制造2025》,再到中央城市工作会议和十三五规划中提出的建设一批新型示范性智慧城市,一系列政策文件的出台为智慧产业园区的建设提供了坚实的政策支撑。 智慧产业园区的核心在于“硬”与“软”基础设施的全面建设。硬件设备方面,物联网、大数据、云计算、人工智能等先进技术的应用,为园区打造了高效、智能的信息基础设施。这些技术不仅提升了园区的运营效率,还为企业提供了便捷、高效的服务。例如,通过智能感知网和物联感知平台,园区能够实时采集和传输各类数据,实现全量数据的互联共享。而软件系统的建设,则更加注重服务的人性化和管理的科学化。智慧园区通过构建公共服务平台、公共技术平台以及各领域的智慧系统,为园区企业、从业人员提供了全方位的公共服务。这些服务不仅涵盖了基础服务和增值服务,还通过线上线下相结合的方式,满足了不同用户群体的多样化需求。同时,智慧园区还注重生态节能环保的基础设施资源建设,以及规划法规标准构成的政策资源、服务组织构成的社会资源等多元资源的整合利用,为园区的可持续发展奠定了坚实基础。 在智慧产业园区的运营过程中,管理者充分利用大数据应用与分析、预测预警、可视指挥等智能化手段,实现了园区管理的科学化、精准化。通过一张图直观展示人、地、物、事、情、组织等资源分布,管理者能够足不出户就能知晓园区资源使用情况。而通过对园区产业数据的深度挖掘、分析、研判,管理者能够掌握园区产业趋势,为科学决策提供有力支撑。此外,智慧园区还注重人文社区的建设,通过提供园区服务通知、园区活动在线咨询、政策法规资料下载等多元化服务,营造了良好的社区氛围。在车辆管理、物业管理等方面,智慧园区也引入了智能化手段,提升了用户体验和园区运营效率。例如,通过智能停车管理系统,园区能够快速寻找停车位,减少停车场拥堵和人为指引调度工作;而端到端的线上物业管理应用,则让物业服务更加便捷、高效。 综上所述,智慧产业园区作为智慧城市的重要组成部分,正以其独特的魅力和无限的潜力吸引着越来越多的关注。通过全面建设“硬”与“软”基础设施、整合多元资源、利用智能化手段提升管理效率,智慧产业园区正逐步成为推动区域经济高质量发展的新引擎。未来,随着技术的不断进步和应用场景的不断拓展,智慧产业园区将迎来更加广阔的发展前景。

    顶顶顶的方法2233111

    fff烦烦烦

    自动驾驶时代的数据管理与服务框架:数据采集、存储及服务一体化解决方案,自动驾驶数据采集、存储与服务框架:技术领导者的必备指南,自动驾驶数据采集及数据服务框架 , 倘若你是产品经理或者项目经理又或者是

    自动驾驶时代的数据管理与服务框架:数据采集、存储及服务一体化解决方案,自动驾驶数据采集、存储与服务框架:技术领导者的必备指南,自动驾驶数据采集及数据服务框架 , 倘若你是产品经理或者项目经理又或者是技术leader,这个将帮您梳理数据采集、数据存储及数据服务的大框架。 倘若您是追求具体技术实现算法细节而不太关注大架构的技术人员,可能这个不太适合,这也是需要仔细考虑的。 ,核心关键词:自动驾驶;数据采集;数据存储;数据服务;框架;产品经理/项目经理/技术leader。,自动驾驶数据管理与服务架构解决方案

    基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档附带,基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档分享,基于FP

    基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档附带,基于FPGA的Cortex-M3软核OV5640摄像头采集与HDMI输出工程实现及开发文档分享,基于FPGA的Cortex-M3软核OV5640摄像头采集工程 实现基于FPGA的Cortex-M3软核基本SOC,系统外设包括GPIO和UART串口和OV5640摄像头,实现摄像头采集和HDMI接口图像输出。 开发基于vivado2019.2和vitis,理论上可适用于任何版本的vivado,软件工程基于Keil设计,并且附带本人编写的详细开发文档,能够快速完成工程的移植。 在该工程基础上可进一步开发更多的功能。 ,基于FPGA的Cortex-M3软核; OV5640摄像头采集; HDMI图像输出; vivado2019.2开发; vitis软件工程; Keil设计。,基于FPGA的Cortex-M3软核与OV5640摄像头采集系统开发工程:HDMI输出,全面移植可升级

    基于Objective-C和C语言的starrtc-ios即时通讯系统设计源码

    该项目为基于Objective-C核心的starrtc-ios即时通讯系统设计源码,涵盖898个文件,其中包括247个头文件(h)、211个PNG图片文件、195个Objective-C源文件(m)、163个JSON文件、46个XIB界面文件、9个JPG图片文件、5个Property List文件(plist)、3个Storyboard文件以及2个Markdown文件(md)。系统支持单聊、群聊、聊天室、文件传输等功能,并集成了免费一对一视频聊天、VOIP语音对讲、直播连麦、视频直播、RTSP/RTMP流媒体处理以及WebRTC服务等先进技术,适用于在线教育、会议、小班课等多种场景。

    基于Python的Django-html特色饮食情感分析语料库模型建立源码.zip

    基于Python的Django-html特色饮食情感分析语料库模型 系统选用B/S模式,应用Django框架, MySQL为后台数据库。

    【weixin9207】课堂考勤微信小程序ssm.zip

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

    ideaeclipse小程序改项目名称教学

    ideaeclipse小程序改项目名称教学

Global site tag (gtag.js) - Google Analytics