match 匹配多种边如何根据不同的边类型进行过滤

提问参考模版:

  • nebula 版本:3.4.1
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否上生产环境:Y
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
MATCH p1 =(start:Company)<-[rel1:Employ|Invest]-(p:Person) where id(start)==-2886766351330904521 and rel1.stockpercent >= 0.01 return rel1

需求是: 如果边类型是Invest 则判断stockpercent 是否>0.01 如果不是则不判断,这个应该怎么写?
rel1: 不只是这两种,有多种,这里只是简化了下

下面方法可以实现,但是有个问题,schema 函数 type, dst 这些会下推吗?

MATCH p1 =(start:Company)<-[rel1:Employ|Invest]-(p:Person) where id(start)==-2886766351330904521 and ((type(rel1)=="Invest" and rel1.stockpercent>0) or type(rel1)!="Invest") return rel1

不是的话,是要输出那一行吗,还是不输出

不是Invest 是其他类型,要输出的

可以试试这样

MATCH p1 =(start:Company)<-[rel1:Employ|Invest]-(p:Person) where id(start)==-2886766351330904521 and (rel1.stockpercent>0 or rel1.stockpercent is null) return rel1

不太对,因为其他的关系种有一些有stockpercent字段,有些关系没有。
上面我那个写法倒是可以实现需求,就是不确定效率怎么样,schema 函数我记得之前哪里看过说不下推的 是吗?

是的,

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。