3.1 Cypher概述

3.1.1 Cypher是什么

Cypher是一种声明式图数据库查询语言,它具有丰富的表现力,能高效地查询和更新图数据。对于初学者来说,Cypher使用相对简单,但其功能还是非常强大,即便是非常复杂的数据库查询也能用Cypher简要地表达出来。这使得用户可以将精力集中在自己所从事的领域,而不用在数据库访问上花太多时间。

Cypher查询语言设计非常人性化,既适合开发人员,也适合专业的运营人员(这点尤为重要)。作为一种声明式查询语言,Cypher专注于清晰地表达从图中检索什么,而不是怎么去检索。在这一点上,它与命令式的Java语言和脚本式的Gremlin(1)语言完全不同。

Cypher博采众长,同时也继承了已有的惯用做法。像WHERE和ORDER BY等大多数关键词均来自于SQL语言(2)。而像模式匹配表达方法借鉴于SPARQL语言(3),部分聚合(Collection)语法来源于Haskell和Python语言。

Cypher借鉴了SQL语言的结构——查询可由各种各样的语句组合。语句被链接在一起,相互之间传递中间结果集。查询语言由多种不同的语句构成,这里是一些获取图的常用语句:

● MATCH:匹配图模式。这是从图中获取数据最常见的方法。

● WHERE:不是独立的语句,而是MATCH、OPTINAL MATCH和WITH的一部分。用于给模式添加约束或者过滤传递给WITH的中间结果。

● RETURN:定义返回的结果。

下面是MATCH和RETURN的例子。示例中的图数据如图3-1所示。

图3-1 示例中的图数据

例如,下面是查找名为John和John朋友的朋友的查询语句。

结果:

提示:本章中这种框线输出格式是通过neo4j-shell得到的,有关neo4j-shell的使用请参见“第2章 Neo4j基础入门”。

接下来在语句中添加一些过滤。

给定一个用户名列表,找到名字在列表中的所有节点。匹配他们的朋友,仅返回那些他们关注的name属性以'S'开头的用户。

结果:

下面是一些用于更新图常用的语句:

● CREATE(和DELETE):创建(和删除)节点和关系。

● SET(和REMOVE):使用SET设置属性值和给节点添加标签,使用REMOVE移除它们。

● MERGE:匹配已经存在的或者创建新节点和模式,这对于有唯一性约束的情况非常有用。