如何筛选出某个rank值对应的路径

提问参考模版:

  • nebula 版本:2.5.0
  • 部署方式:单机
  • 语法怎么写呢,在手册里没找到相关的案例
  • 需求:我只想返回follow的rank值为1的路径

参考这个语句呢,来自文档 WHERE - Nebula Graph Database 手册

# 通过 rank 过滤边,查找 rank 大于 2 的边。
nebula> GO FROM "1" \
        OVER e1 \
        WHERE rank(edge) > 2 \
        YIELD src(edge), dst(edge), rank(edge) AS Rank, properties(edge).p1 | \
        ORDER BY $-.Rank DESC;
+-----------+-----------+------+---------------------+
| src(EDGE) | dst(EDGE) | Rank | properties(EDGE).p1 |
+-----------+-----------+------+---------------------+
| "1"       | "2"       | 6    | 16                  |
| "1"       | "2"       | 5    | 15                  |
| "1"       | "2"       | 4    | 14                  |
| "1"       | "2"       | 3    | 13                  |
+-----------+-----------+------+---------------------+

测试了一下GO语句是可以的。
但是用match语句没有返回结果,是哪里写的有问题呢?

你需要把边 [e:follow*1] 边换成 [e:follow],目前 nebula 内部将边后的 * 视作了变长哪怕是写的 1,对变长边,变量 e 的类型就变成了列表 list,所以这里的 rank(e) == 1 总是返回了 false;

后面我们会去提个 issue,单独处理一下定长为 1 的边;你可以用下面的 query 再试试:

MATCH p=(v)-[e:follow]-(v2)
WHERE id(v) == "player10" and rank(e) == 1
RETURN p
LIMIT 100
1 个赞

好的,感谢

记录了一个 issue,后期优化一下这里的处理:

3 个赞

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