Apache AGE的MATCH子句
创始人
2025-01-07 21:04:33
0

MATCH子句允许您在数据库中指定查询将搜索的模式。这是检索数据以在查询中使用的主要方法。

通常在MATCH子句之后会跟随一个WHERE子句,以添加用户定义的限制条件到匹配的模式中,以操纵返回的数据集。谓词是模式描述的一部分,不应被视为仅在匹配完成后应用的过滤器。这意味着WHERE应始终与其所属的MATCH子句一起放置。

MATCH可以出现在查询的开头或稍后,可能在WITH之后。如果它是第一个子句,那么尚未绑定任何内容,Cypher将设计一个搜索,以找到与子句中指定的任何关联谓词匹配的结果。此搜索找到的顶点和边将作为已绑定的模式元素可用,并且可以用于子图的模式匹配。它们也可以在任何未来的子句中使用,在那里Cypher将使用已知元素,然后找到进一步的未知元素。

Cypher是一种声明性语言,因此通常查询本身不指定用于执行搜索的算法。WHERE部分中的谓词可以在模式匹配之前、期间或匹配找到之后进行评估。

基本顶点查找

获取所有顶点

通过指定一个带有单个顶点且无标签的模式,将返回图中的所有顶点。

SELECT * FROM cypher('graph_name', $$ MATCH (v) RETURN v $$) as (v agtype); 

返回数据库中的所有顶点。

 v {id: 0; label: ‘Person’; properties: {name: ‘Charlie Sheen’}}::vertex {id: 1; label: ‘Person’; properties: {name: ‘Martin Sheen’}}::vertex {id: 2; label: ‘Person’; properties: {name: ‘Michael Douglas’}}::vertex {id: 3; label: ‘Person’; properties: {name: ‘Oliver Stone’}}::vertex {id: 4; label: ‘Person’; properties: {name: ‘Rob Reiner’}}::vertex {id: 5; label: ‘Movie’; properties: {name: ‘Wall Street’}}::vertex {id: 6; label: ‘Movie’; properties: {title: ‘The American President’}}::vertex 7 row(s) returned 

获取带有标签的所有顶点

使用单个节点模式,其中顶点的标签如下所示:

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH (movie:Movie) RETURN movie.title $$) as (title agtype); 

返回数据库中的所有电影。

title ‘Wall Street’ ‘The American President’ 2 row(s) returned 

相关顶点

符号-[]-指定了一个边,没有指定边的类型或方向。

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH (director {name: 'Oliver Stone'})-[]-(movie) RETURN movie.title $$) as (title agtype); 

返回由 'Oliver Stone' 导演的所有电影。

plaintextCopy code title ‘Wall Street’ 1 row(s) returned 

匹配标签

要在顶点上使用标签来约束模式,请将其添加到模式中的顶点中,使用标签语法。

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH (:Person {name: 'Oliver Stone'})-[]-(movie:Movie) RETURN movie.title $$) as (title agtype); 

返回与标记为 Movie 的 Person 'Oliver' 相连的任何顶点。

plaintextCopy code title ‘Wall Street’ 1 row(s) returned 

边的基础

出边

要返回有向边,您可以使用->或<-来指定边指向的方向。

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH (:Person {name: 'Oliver Stone'})-[]->(movie) RETURN movie.title $$) as (title agtype); 

返回与 'Oliver' 通过一条出边相连的任何顶点。

plaintextCopy code title ‘Wall Street’ 1 row(s) returned 

有向边和变量

如果需要一个变量,无论是用于过滤边的属性还是用于返回边,请在您希望使用的边或顶点内指定变量。

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH (:Person {name: 'Oliver Stone'})-[r]->(movie) RETURN type(r) $$) as (title agtype); 

返回从 'Oliver' 出发的每条出边的类型。

plaintextCopy code title ‘DIRECTED’ 1 row(s) returned 

根据边标签匹配

当您知道要匹配的边标签时,可以通过使用冒号和边标签一起指定它。

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH (:Movie {title: 'Wall Street'})<-[:ACTED_IN]-(actor) RETURN actor.name $$) as (actors_name agtype); 

返回所有 ACTED_IN 'Wall Street' 的演员。

plaintextCopy code actors_name ‘Charlie Sheen’ ‘Martin Sheen’ ‘Michael Douglas’ 3 row(s) returned 

带有变量的边标签匹配

如果要使用变量保存边,并指定要使用的边标签,可以通过同时指定它们来执行。

sqlCopy code SELECT * FROM cypher('graph_name', $$ MATCH ({title: 'Wall Street'})<-[r:ACTED_IN]-(actor) RETURN r.role $$) as (role agtype); 

返回 'Wall Street' 的 ACTED_IN 角色。

plaintextCopy code role ‘Gordon Gekko’ ‘Carl Fox’ ‘Bud Fox’ 3 row(s) returned 

多个边

边可以串联在一起以匹配无限数量的边。只要遵循基本模式()-[]-(),用户就可以连接边和顶点以匹配特定模式。

sqlCopy code SELECT * FROM cypher('graph_name', $$     MATCH (charlie {name: 'Charlie Sheen'})-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)     RETURN movie.title, director.name $$) as (title agtype, name agtype); 

返回 'Charlie Sheen' 参演的电影及其导演。

plaintextCopy code title	name ‘Wall Street’	‘Oliver Stone’ 1 row(s) returned 

变长边

当两个顶点之间的连接长度可变时,可以使用以下连接返回形成连接的边的列表。

介绍

与在模式中使用许多顶点和边描述来描述长路径不同,可以通过在模式的边描述中指定长度来描述许多边(和中间顶点)。

(u)-[*2]->(v)

描述了一个具有三个顶点和两条边的右定向路径,可以重写为:

(u)-[]->()-[]->(v)

也可以给出范围长度:

(u)-[*3..5]->(v)

相当于:

(u)-[]->()-[]->()-[]->(v) 和 (u)-[]->()-[]->()-[]->()-[]->(v) 和 (u)-[]->()-[]->()-[]->()-[]->()-[]->(v)

前面的示例给出了边的边界值,即 u 和 v 之间的边(和顶点)的较小和较大边界值。这两个绑定值中的任何一个或两个都可以被排除。

(u)-[*3..]->(v)

返回 u 和 v 之间具有三个或更多边的所有路径。

(u)-[*..5]->(v)

返回 u 和 v 之间具有5个或更少边的所有路径。

(u)-[*]->(v)

返回 u 和 v 之间的所有路径。

示例

SELECT * FROM cypher('graph_name', $$     MATCH p = (actor {name: 'Willam Dafoe'})-[:ACTED_IN*2]-(co_actor)     RETURN relationships(p) $$) as (r agtype); 

返回边的列表,包括 Willam Dafoe 所参演的电影以及他与两位 Spiderman 演员合作的边。

r [{id: 0; label:"ACTED_IN"; properties: {role: "Green Goblin"}}::edge, {id: 1; label: "ACTED_IN; properties: {role: "Spiderman", actor: "Toby Maguire}}::edge] [{id: 0; label:"ACTED_IN"; properties: {role: "Green Goblin"}}::edge, {id: 2; label: "ACTED_IN; properties: {role: "Spiderman", actor: "Andrew Garfield"}}::edge] 2 row(s) returned 

  使用公有云服务

一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

直接连接

每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

  1. 来到左侧菜单栏的 设置部分
  2. 点击数据库
  3. 启用数据库直连
  4. 找到应用的连接信息

开启直连

白名单

MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

配置白名单

通过数据库客户端连接数据库,可以执行图操作

CREATE EXTENSION age; LOAD 'age'; SET search_path = ag_catalog, "$user", public;

 

相关内容

热门资讯

备受关注的!兴动互娱辅助工具免... 备受关注的!兴动互娱辅助工具免费,樱花之盛能不能开挂(一直有挂安装)-哔哩哔哩进入游戏-大厅左侧-新...
此事迅速冲上热搜!电脑版海盗来... 此事迅速冲上热搜!电脑版海盗来了辅助,德友汇辅助(一直有挂工具)-哔哩哔哩1、在电脑版海盗来了辅助插...
一直以来!jj斗地主外卦,拱趴... 一直以来!jj斗地主外卦,拱趴大菠萝辅助公户(其实存在有软件)-哔哩哔哩1、每一步都需要思考,不同水...
经核实!内蒙老友辅助,枫叶辅助... 经核实!内蒙老友辅助,枫叶辅助官网(切实是真的软件)-哔哩哔哩进入游戏-大厅左侧-新手福利-激活码辅...
据悉!全民比鸡辅助透视工具,长... 据悉!全民比鸡辅助透视工具,长乐互娱软件助手(切实有挂修改器)-哔哩哔哩1、全民比鸡辅助透视工具有没...
现有说明如下!上饶中至脚本修改... 现有说明如下!上饶中至脚本修改,欢乐茶馆挂有没有(一贯是有挂)-哔哩哔哩小薇(辅助器软件下载)致您一...
现就发布提示!蜀山四川小程序有... 现就发布提示!蜀山四川小程序有挂吗,皮皮衡阳字牌黑科技视频(一直真的是有修改器)-哔哩哔哩1、现就发...
今天上午!多乐跑的快游戏辅助脚... 今天上午!多乐跑的快游戏辅助脚本,丽水双扣茶苑脚本(总是是有工具)-哔哩哔哩1)多乐跑的快游戏辅助脚...
截至目前!雀神挂件价格辅助开挂... 截至目前!雀神挂件价格辅助开挂,随意玩有没有辅助(竟然真的是有器)-哔哩哔哩1、每一步都需要思考,不...
最新消息!牵手游戏辅助,情怀宜... 最新消息!牵手游戏辅助,情怀宜春怎么开挂(其实存在有工具)-哔哩哔哩1、游戏颠覆性的策略玩法,独创攻...