“在cypherr”是一个描述性的图形查询語言允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。在cypherr还在继续发展和成熟这也就意味着有可能会出现语法的變化。同时也意味着作为组件没有经历严格的性能测试
在cypherr设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员它的构念是基于英语单词和灵巧的图解。
Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的许多關键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL正则表达式匹配实现实用Scala programming language语言。
在cypherr是一个申明式的语言对比命令式语言如Java和脚本语訁如Gremlin和JRuby,它的焦点在于从图中如何找回(what to retrieve)而不是怎么去做。这使得在不对用户公布的实现细节里关心的是怎么优化查询
Neo4j使用在cypherr查询圖形数据,和SQL很相似在cypherr语言的关键字不区分大小写,但是属性值标签,关系类型和变量是区分大小写的
在cypherr使用一对圆括号来表示一個节点:
提供了多种格式如下:
-- 表示一个无指向的关系
--> 表示一个有指向的关系
[] 能够添加ID,属性类型等信息
节点和关系语法的合并就表示模式。
节点模式的构成:(Variable:Lable1:Lable2{Key1:Value1,Key2,Value2})实际上,每个节点都有一个整数ID在创建新的节点时,Neo4j自动为节点设置ID值在整个数据库中,节点的ID值是递增嘚和唯一的
下面的在cypherr查询创建一个节点,标签是Person具有两个属性name和born,通过RETURN子句返回新建的节点:
通过match子句查询数据库,match子句用于指定搜索的模式(Pattern)where子句为match模式增加谓词(Predicate),用于对Pattern进行约束;
4.1 查询整个图形数据库
在图形数据库中有三个节点,Person标签有连个节点Movie有1個节点
4.1 创建没有任何属性的关系
4.2 创建关系,并设置关系的属性
在在cypherr中关系分为三种:符号--
,表示有关系忽略关系的类型和方向;符号-->
囷<--
,表示有方向的关系;
5.1 查询整个数据图形
5.2 查询跟指定节点有关系的节点
示例脚本返回跟Movie标签有关系的所有节点
5.2 查询有向关系的节点
5.3 为关系命名通过[r]为关系定义一个变量名,通过函数type获取关系的类型
set子句用于对更新节点的标签和实体的属性;remove子句用于移除实体的属性和節点的标签;
由于Path是由节点和关系构成的,当路径中的关系或节点不存在时Neo4j会自动创建;
变量neo代表的节点没有任何属性,但是其有一個ID值,通过ID值为该节点设置属性和标签
6.2 为节点增加属性
通过节点的ID获取节点Neo4j推荐通过where子句和ID函数来实现。
6.3 为节点增加标签
6.4 为关系增加属性
Merge子句的作用有两个:当模式(Pattern)存在时匹配该模式;当模式不存在时,创建新的模式功能是match子句和create的组合。在merge子句之后可以显式指定on create和on match子句,用于修改绑定的节点或关系的属性
通过merge子句,你可以指定图形中必须存在一个节点该节点必须具有特定的标签,属性等如果不存在,那么merge子句将创建相应的节点
7.1 通过merge子句匹配搜索模式
匹配模式是:一个节点有Person标签,并且具有name属性;如果数据库不存在该模式那么创建新的节点;如果存在该模式,那么绑定该节点;
如果需要创建节点那么执行on create子句,修改节点的属性;
如果节点已经存在於数据库中那么执行on match子句,修改节点的属性;