图数据库HugeGraph学习-17:模式匹配

匹配含义

match()语句为图查询提供了一种基于“模式匹配”的方式,以便用更具描述性的方式进行图查询。match()语句通过多个模式片段traversal fragments来进行模式匹配。这些traversal fragments中会定义一些变量,只有满足所有用变量表示的约束的对象才能够通过,并被放到一个Map<String, Object>中,其中map的key为变量名(label),value为顶点、边、路径或者属性。match()语句的格式为:match(Traversal…)。其中可以有任意多个Traversal,每一个Traversal就是一个“匹配模式”traversal fragment。

match()语句中的“模式”通过MatchAlgorithm来选择匹配顺序,默认的MatchAlgorithm是CountMatchAlgorithm。CountMatchAlgorithm根据过滤强度动态调整“模式匹配”的执行计划(最能够减少规模的“模式”优先匹配),从而优化执行减少资源消耗。因此,当图的规模比较大且用户不知道满足特定模式的数据规模时,使用match()可以自动进行优化,减小操作规模。另外,对于一些图查询场景,相较于单路径遍历,match()语句的“模式匹配”更容易表达需求。

实例说明

// 对每一个顶点,用以下模式去匹配,满足则生成一个map<String, Object>,不满足则过滤掉
// 模式1:“a”对应当前顶点,且创建了软件“HugeGraph”
// 模式2:“b”对应顶点软件“HugeGraph”
// 模式3:“c”对应创建软件“HugeGraph”的年龄为29的person顶点
g.V().match(__.as(‘a’).out(‘created’).has(‘name’, ‘HugeGraph’).as(‘b’),
__.as(‘b’).in(‘created’).has(‘age’, 29).as(‘c’))

// 对每一个顶点,用以下模式去匹配,满足则生成一个map<String, Object>,不满足则过滤掉
// 模式1:“a”对应当前顶点,且创建了软件“HugeGraph”
// 模式2:“b”对应顶点软件“HugeGraph”
// 模式3:“c”对应创建软件“HugeGraph”的年龄为29的person顶点
// 并选取map中的“a"和”c",对应的对象以”name“属性的值代替
g.V().match(__.as(‘a’).out(‘created’).has(‘name’, ‘HugeGraph’).as(‘b’),
__.as(‘b’).in(‘created’).has(‘age’, 29).as(‘c’))
.select(‘a’, ‘c’).by(‘name’)

// 对每一个顶点,用以下模式去匹配,满足则生成一个map<String, Object>,不满足则过滤掉
// 模式1:“a”对应当前顶点,且创建了软件“HugeGraph”
// 模式2:“b”对应顶点软件“HugeGraph”
// 模式3:“c”对应创建软件“HugeGraph”的年龄为29的person顶点
// 模式4:”a“和”c“对应的对象不相等
// 并选取map中的“a"和”c",对应的对象以”name“属性的值代替
g.V().match(__.as(‘a’).out(‘created’).has(‘name’, ‘HugeGraph’).as(‘b’),
__.as(‘b’).in(‘created’).has(‘age’, 29).as(‘c’))
.where(‘a’, neq(‘c’))
.select(‘a’, ‘c’).by(‘name’)

// 对每一个顶点打标签”a“,“a"经过一条OUT方向的”knows“边到达的顶点打标签”b“
// 对”b“中的每一个顶点用以下模式去匹配,满足则生成一个map<String, Object>,不满足则过滤掉
// 模式1:”b“通过一条OUT方向的”created“边到达顶点”c“
// 模式2:”c“不能通过一条IN方向的”created“边到达”a“
// 选取map中的“a”,”b“,”c",对应的对象以”name“属性的值代替
g.V().as(‘a’).out(‘knows’).as(‘b’)
.match(__.as(‘b’).out(‘created’).as(‘c’),
.not(.as(‘c’).in(‘created’).as(‘a’)))
.select(‘a’,‘b’,‘c’).by(‘name’)

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taotaobujuerulv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值