lookup on edge 时,可否按照起点或者终点的某个属性进行where过滤

  • nebula 版本: 2.0.0 beta
  • 部署方式(分布式 / 单机 / Docker / DBaaS):docker
  • 硬件信息
    • 磁盘( 必须为 SSD ,不支持 HDD)500GB ssd
    • CPU、内存信息:40C 128G
  • 问题的具体描述
    使用lookup查询edge时,想要同时按照起点或者终点某个属性进行过滤,怎么查可以达到目的呢?

例如tag A(name: ‘aaaaa’) tag B(name:‘bbbbb’) edge ab: A->B

lookup on ab where ab._src.name == ‘aaaaa’ or ab._dst.name =‘bbbbb’

如果lookup无法支持这个查询,使用其他的语法有能查到想要的结果的方法吗。
查询结果的要求:起点A和终点B满足属性的条件即可。

lookup + go

请问lookup+go是指的对edge进行lookup,然后对点 进行go查询,
还是对点进行lookup, 再从点开始进行go 查询

如果是先使用lookup查询点的话,由于lookup之后无法使用管道引用查询结果中的vid,所以无法接go

无法引用是bug,https://github.com/vesoft-inc/nebula-graph/pull/480 这个pr会修复

假设该bug已经修复,可以引用vid,那么查询语句是否为下面的形式:
lookup up tagA where tagA.name ==‘aaaaa’ yield tagA._vid as vid| go from $-.vid over ab yield $^.tagA.name, ab._dst, $$.tagB.name

但是这样的话,上面的语句没有对tagB的name字段进行过滤了。。。怎么在一个语句中同时组合出对起点A和终点B的字段的过滤呢?

go的where语句支持起点终点属性的过滤

使用match解决了上述问题:
match p = (v1:A{name:‘aaaaa’} -[e1:ab]-> (v2:B{name:‘bbbbb’} -[e2:bc]-> (v3:C{name:‘ccccc’}) return p