ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:23.63KB ,
资源ID:10542075      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10542075.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(neo4jcypher查询语言详解.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

neo4jcypher查询语言详解.docx

1、neo4jcypher查询语言详解Cypher介绍“Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。同时也意味着作为组件没有经历严格的性能测试。Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员(我认为这个很重要)。它的构念是基于英语单词和灵巧的图解。Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正

2、则表达式匹配实现实用Scala programming language语言。Cypher是一个申明式的语言。对比命令式语言如Java和脚本语言如Gremlin和JRuby,它的焦点在于从图中如何找回(what to retrieve),而不是怎么去做。这使得在不对用户公布的实现细节里关心的是怎么优化查询。这个查询语言包含以下几个明显的部分: START:在图中的开始点,通过元素的ID或所以查找获得。 MATCH:图形的匹配模式,束缚于开始点。 WHERE:过滤条件。 RETURN:返回所需要的。在下例中看三个关键字示例图片如下:如:这个有个查询,通过遍历图找到索引里一个叫John的朋友的朋友

3、(不是他的直接朋友),返回John和找到的朋友的朋友。START john=node:node_auto_index(name = John)MATCH john-:friend-()-:friend-fofRETURN john, fof返回结果:下一步添加过滤:在下一个例子中,列出一组用户的id并遍历图查找这些用户接出friend关系线,返回有属性name并且其值是以S开始的用户。START user=node(5,4,1,2,3)MATCH user-:friend-followerWHERE = /S.*/RETURN user, 返回结果:操作符Cypher中的操作符有三个不同种类:

4、数学,相等和关系。数学操作符有+,-,*,/和%。当然只有+对字符有作用。等于操作符有=,=。因为Neo4j是一个模式少的图形数据库,Cypher有两个特殊的操作符和!。有些是用在属性上,有些事用于处理缺少值。对于一个不存在的属性做比较会导致错误。为替代与其他什么做比较时总是检查属性是否存在,在缺失属性时问号将使得比较总是返回true,感叹号使得比较总是返回false。 = foo这个断言在属性缺失情况下将评估为true。! = foo这个断言在属性缺失情况下将评估为false。警告:在同一个比较中混合使用两个符号将导致不可预料的结果。参数Cypher支持带参数的查询。这允许开发者不需要必须构

5、建一个string的查询,并且使得Cypher的查询计划的缓存更容易。参数可以在where子句,start子句的索引key或索引值,索引查询中作为节点/关系id的引用。以下是几个在java中使用参数的示例:节点id参数Map params = new HashMap();( id, 0 );ExecutionResult result = ( start n=node(id) return , params );节点对象参数Map params = new HashMap();( node, andreasNode );ExecutionResult result = ( start n=no

6、de(node) return , params );多节点id参数Map params = new HashMap();( id, ( 0, 1, 2 ) );ExecutionResult result = ( start n=node(id) return , params );字符串参数Map params = new HashMap();( name, Johan );ExecutionResult result = ( start n=node(0,1,2) where = name return n, params );索引键值参数Map params = new HashMap

7、();( key, name );( value, Michaela );ExecutionResult result = ( start n=node:people(key = value) return n, params );索引查询参数Map params = new HashMap();( query, name:Andreas );ExecutionResult result = ( start n=node:people(query) return n, params ); SKIP 与LIMIT * 的数字参数Map params = new HashMap();( s, 1

8、);( l, 1 );ExecutionResult result = ( start n=node(0,1,2) return skip s limit l, params ); 正则表达式参数Map params = new HashMap();( regex, .*h.* );ExecutionResult result = ( start n=node(0,1,2) where = regex return , params );标识符当你参考部分的模式时,需要通过命名完成。定义的不同的命名部分就被称为标识符。如下例中:START n=node(1) MATCH n-b RETURN

9、b标识符为n和b。标识符可以是大写或小些,可以包含下划线。当需要其他字符时可以使用符号。对于属性名的规则也是一样。注解可以在查询语句中使用双斜杠来添加注解。如:START n=node(1) RETURN b 结果:定向关系和标识符如果需要关系的标识符,为了过滤关系的属性或为了返回关系,可如下例使用标识符。查询:START n=node(3)MATCH (n)-r-()RETURN r所有从节点A接出的关系将被返回。结果:通过关系类型匹配当已知关系类型并想通过关系类型匹配时,可以通过冒号详细描述。查询:START n=node(3)MATCH (n)-:BLOCKS-(x)RETURN x返回

10、A接出关系类型为BLOCKS的节点。结果:通过关系类型匹配和使用标识符如果既想获得关系又要通过已知的关系类型,那就都添加上,如:查询:START n=node(3)MATCH (n)-r:BLOCKS-()RETURN r所有从A接出的关系为BLOCKS的关系都被返回。结果:带有特殊字符的关系类型有时候数据库中有非字母字符类型,或有空格在内时,使用单引号。查询:START n=node(3)MATCH (n)-r:TYPE WITH SPACE IN IT-()RETURN r返回类型有空格的关系。结果:多重关系关系可以通过使用在()()多个语句来表达,或可以串在一起。如下:查询:START

11、a=node(3)MATCH (a)-:KNOWS-(b)-:KNOWS-(c)RETURN a,b,c路径中的三个节点。结果:可变长度的关系可变数量的关系-节点可以使用-:TYPE*minHops.maxHops-。查询:START a=node(3), x=node(2, 4)MATCH a-:KNOWS*1.3-xRETURN a,x如果在1到3的关系中存在路径,将返回开始点和结束点。结果:在可变长度关系的关系标识符当连接两个节点的长度是可变的不确定的时,可以使用一个关系标识符遍历所有关系。查询:START a=node(3), x=node(2, 4)MATCH a-r:KNOWS*1

12、.3-xRETURN r如果在1到3的关系中存在路径,将返回开始点和结束点。结果:零长度路径当使用可变长度路径,可能其路径长度为0,这也就是说两个标识符指向的为同一个节点。如果两点间的距离为0,可以确定这是同一个节点。查询:START a=node(3)MATCH p1=a-:KNOWS*0.1-b, p2=b-:BLOCKS*0.1-cRETURN a,b,c, length(p1), length(p2)这个查询将返回四个路径,其中有些路径长度为0.结果:可选关系如果关系为可选的,可以使用问号表示。与SQL的外连接类似。如果关系存在,将被返回。如果不存在在其位置将以null代替。查询:ST

13、ART a=node(2)MATCH a-xRETURN a,x返回一个节点和一个null,因为这个节点没有关系。结果:可选类型和命名关系通过一个正常的关系,可以决定哪个标识符可以进入,那些关系类型是需要的。查询:START a=node(3)MATCH a-r:LOVES-()RETURN a,r返回一个节点和一个null,因为这个节点没有关系。结果:可选元素的属性返回可选元素上的属性,null值将返回null。查询:START a=node(2)MATCH a-xRETURN x, 元素x在查询中为null,所有其属性name为null。结果:复杂匹配在Cypher中,可哟通过更多复杂模式

14、来匹配,像一个钻石形状模式。查询:START a=node(3)MATCH (a)-:KNOWS-(b)-:KNOWS-(c),(a)-:BLOCKS-(d)-:KNOWS-(c)RETURN a,b,c,d路径中的四个节点。结果:最短路径使用shortestPath函数可以找出一条两个节点间的最短路径,如下。查询:START d=node(1), e=node(2)MATCH p = shortestPath( d-*.15-e )RETURN p这意味着:找出两点间的一条最短路径,最大关系长度为15.圆括号内是一个简单的路径连接,开始节点,连接关系和结束节点。关系的字符描述像关系类型,最大

15、数和方向在寻找最短路径中都将被用到。也可以标识路径为可选。结果:所有最但路径找出两节点节点所有的最短路径。查询:START d=node(1), e=node(2)MATCH p = allShortestPaths( d-*.15-e )RETURN p这将在节点d与e中找到两条有方向的路径。结果:命名路径如果想在模式图上的路径进行过滤或者返回此路径,可以使用命名路径(named path)。查询:START a=node(3)MATCH p = a-bRETURN p开始节点的两个路径。结果:在绑定关系上的匹配当模式中包含一个绑定关系时,此关系模式没有明确的方向,Cypher将尝试着切换连

16、接节点的边匹配关系。查询:START a=node(3), b=node(2)MATCH a-:KNOWS-x-:KNOWS-bRETURN x将返回两个连接节点,一次为开始节点,一次为结束节点。结果:Where如果需要从查找的数据的图中过滤,可以在查询语句中添加where子句。图:Boolean 操作类型可以使用boolean操作符and 和 or 或者也可以使用not()函数。查询:START n=node(3, 1)WHERE 30 and = Tobias) ornot = Tobias)RETURN n返回节点。结果:节点属性上的过滤查询:START n=node(3, 1)WHER

17、E ()WHERE type(r) = /K.*/RETURN r关系整个以K开始的类型名都将返回。结果:属性存在性查询:START n=node(3, 1)WHERE RETURN n结果:如果缺失属性默认为true仅当属性存在时,比较一个图的元素的此属性,使用允许空属性的语法。查询:START n=node(3, 1)WHERE = whiteRETURN n所有节点即使没有belt属性的 都将返回。此类比较返回为true。结果:如果缺失属性默认为false需要在缺失属性时为false,即不想返回此属性不存在的节点时。使用感叹号。查询:START n=node(3, 1)WHERE ! =

18、 whiteRETURN n结果:空置null过滤有时候需要测试值或者标识符是否为null。与sql类似使用 is null 或 not(is null x)也能起作用。查询:START a=node(1), b=node(3, 2)MATCH a-r-bWHERE r is nullRETURN bTobias节点没有链接上。结果:关系过滤为过滤两点间基于关系的子图,在match子句中使用限制部分。可以描述带方向的关系和可能的类型。这些都是有效的表达:WHERE a-b WHERE a-b WHERE a:KNOWS-bWHERE a-:KNOWS-b查询:START a=node(1),

19、b=node(3, 2)WHERE a(c)RETURN r结果:返回属性查询:START n=node(1)RETURN 结果:带特殊字符的标识符使用不在英语字符表中的字符,可以使用单引号。查询:STARTThis isnt a commonidentifier=node(1)RETURNThis isnt a commonidentifier.结果:列的别名可以给展示出来的列名起别名。查询:START a=node(1)RETURN AS SomethingTotallyDifferent返回节点的age属性,但重命名列名。结果:可选属性属性在节点上可能存在也可能不存在,可以使用问号来标识

20、标识符即可。查询:START n=node(1, 2)RETURN 如果存在age属性,则返回,不存在则返回null。结果:特别的结果DISTINCT仅检索特别的行,基于选择输出的列。查询:START a=node(1)MATCH (a)-(b)RETURN distinct b返回name为B的节点,但仅为一次。结果:neo4j 聚合函数1. 聚合Aggregation1. 计数2. 计算节点数3. 分组计算关系类型4. 计算实体数5. 计算非空可以值数6. 求和sum7. 平均值avg8. 最大值max9. 最小值min10. 聚类COLLECT11. 相异DISTINCT聚合(Aggre

21、gation)为集合计算数据,Cypher提供聚类功能,与SQL的group by类似。在return语句中发现的任何聚类函数,所有没有聚类函数的列将作为聚合key使用。图:计数计数(count)使用来计算行数。Count有两种使用方法。Count(*)计算匹配的行的行数,count()计算标识符中非空值数。计算节点数计算链接到一个节点的节点数,可以使用count(*)。查询:START n=node(2)MATCH (n)-(x)RETURN n, count(*)返回开始节点和相关节点节点数。结果:分组计算关系类型计算分组了得关系类型,返回关系类型并使用count(*)计算。查询:STAR

22、T n=node(2)MATCH (n)-r-()RETURN type(r), count(*)返回关系类型和其分组数。结果:计算实体数相比使用count(*),可能计算标识符更实在。查询:START n=node(2)MATCH (n)-(x)RETURN count(x)返回链接到开始节点上的节点数结果:计算非空可以值数查询:START n=node(2,3,4,1)RETURN count)结果:求和(sum)Sum集合简单计算数值类型的值。Null值将自动去掉。如下:查询:START n=node(2,3,4)RETURN sum计算所有节点属性值之和。结果:平均值(avg)Avg计

23、算数量列的平均值查询:START n=node(2,3,4)RETURN avg结果:最大值(max)Max查找数字列中的最大值。查询:START n=node(2,3,4)RETURN max结果:最小值(min)Min使用数字属性作为输入,并返回在列中最小的值。查询:START n=node(2,3,4)RETURN min结果:聚类(COLLECT)Collect将所有值收集到一个集合list中。查询:START n=node(2,3,4)RETURN collect返回一个带有所有属性值的简单列。结果:相异(DISTINCT)聚合函数中使用distinct来去掉值中重复的数据。查询:S

24、TART a=node(2)MATCH a-bRETURN count(distinct 结果:neo4j 高级篇1. 排序Order by1. 通过节点属性排序节点2. 通过多节点属性排序节点3. 倒序排列节点4. 空值排序2. Skip1. 跳过前三个2. 返回中间两个3. Limit1. 返回第一部分4. 函数Functions1. 判断2. All3. Any4. None5. Single6. Scalar函数7. Length8. Type9. Id10. Coalesce11. Iterable函数12. Nodes13. Relationships14. Extract排序(O

25、rder by)输出结果排序可以使用order by 子句。注意,不能使用节点或者关系排序,仅仅只针对其属性有效。图:通过节点属性排序节点查询:START n=node(3,1,2)RETURN nORDER BY 结果:通过多节点属性排序节点在order by子句中可以通过多个属性来排序每个标识符。Cypher首先将通过第一个标识符排序,如果第一个标识符或属性相等,则在order by中检查下一个属性,依次类推。查询:START n=node(3,1,2)RETURN nORDER BY , 首先通过age排序,然后再通过name排序。结果:倒序排列节点可以在标识符后添加desc或asc来进

26、行倒序排列或顺序排列。查询:START n=node(3,1,2)RETURN nORDER BY DESC结果:空值排序当排列结果集时,在顺序排列中null将永远放在最后,而在倒序排列中放最前面。查询:START n=node(3,1,2)RETURN , nORDER BY 结果:SkipSkip允许返回总结果集中的一个子集。此不保证排序,除非使用了order by子句。 图:跳过前三个返回结果中一个子集,从第三个结果开始,语法如下:查询:START n=node(3, 4, 5, 1, 2)RETURN nORDER BY SKIP 3前三个节点将略过,最后两个节点将被返回。结果:返回中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1