多个tag共享属性的情况下,GET SUBGRAPH如何根据该属性过滤点

  • nebula 版本:3.6.0
  • 部署方式:单机
  • 安装方式:RPM
  • 是否上生产环境:N
  • 硬件信息
    • 600G SSD
    • vCPU: 8
    • 内存: 64G

问题:

多个tag(book, store, reader)共享属性(出入度degree)的情况下,GET SUBGRAPH希望根据该属性过滤掉degree高于10的点,尝试以下写法:

GET SUBGRAPH WITH PROP 1 STEPS FROM "reader_001" 
where $$.book.degree <= 10 and $$.store.degree <= 10 and $$.reader.degree <= 10
YIELD VERTICES AS nodes, EDGES AS relationships;

但结果为空。只限定book的degree结果却不为空

GET SUBGRAPH WITH PROP 1 STEPS FROM "reader_001" 
where $$.book.degree <= 10
YIELD VERTICES AS nodes, EDGES AS relationships;

应该如何实现根据degree过滤所有满足条件的点?

ping一下

这个应该是 OR?

GET SUBGRAPH可以支持OR了吗,看doc说不支持诶

1 个赞

那你用 match 试试

match (v1)-[e]->(v2) where id(v1) ==  "reader_001"  and (where v2.book.degree <=10 or  v2.store.degree <=10 or v2.reader.degree <= 10) return v2, e

好的,其实我们业务上更多情况是step > 1,比如要跳10跳get subgraph应该怎么实现呢?

中间点你要吗?还是要最后的点结果就行?

需要中间点和边的

match p=(v1)-[e*..10]->(v2) where id(v1) ==  "reader_001"  and (where v2.book.degree <=10 or  v2.store.degree <=10 or v2.reader.degree <= 10) return p

试试这个?
不过这个性能可能会比 get subgraph 慢

这个我理解是不是只过滤终点的degree?路径上的每个点的degree如果也要过滤能支持吗?

match p=(v)-[e*]->(v2) where id(v) == "player100" and reduce(n=true, n1 in nodes(p) | n and (n1.book.degree <=10 or  n1.store.degree <=10 or n1.reader.degree <= 10) ) return p

试试这个。数据量不大的情况下,性能应该还好

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