NebulaGraph查询几跳,路径详解

举例,查询1-3跳内的所有朋友

方法1:在 MATCH 中定义路径变量

MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, length(p) AS hops;

关键修改:

  • 在 MATCH 后添加 p= 为路径分配变量名

方法2:使用 relationships() 函数(如果不需完整路径)

MATCH (v:person)-[e:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, size(e) AS hops;

这里使用:

  • e 作为关系变量

  • size(e) 计算关系数量(跳数)

方法3:使用 path 函数(Nebula 3.0+)

MATCH (v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, 
       length(path(v, v2)) AS hops;

完整正确查询示例

-- 方案1:定义路径变量(推荐)
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, 
       length(p) AS hops,
       nodes(p) AS path_nodes,
       relationships(p) AS path_edges;

-- 方案2:只计算跳数
MATCH (v:person)-[e:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN id(v) AS source, id(v2) AS target, 
       size(e) AS hops;

关键点说明

  1. 路径变量定义:

    • 在 MATCH 中使用 p=(start)-[edge]->(end) 语法定义路径变量

    • p 包含完整路径信息(顶点和边)

  2. 路径函数:

    • length(p):获取路径长度(跳数)

    • nodes(p):提取路径中的所有顶点

    • relationships(p):提取路径中的所有边

  3. 替代方案:

    • 如果只关心跳数不关心具体路径,使用 size(e) 更高效

其他相关查询示例

-- 查询路径详情
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
RETURN p;

-- 查询路径中的具体节点
MATCH p=(v:person)-[:friend*1..3]->(v2:person)
WHERE id(v) == "p100"
UNWIND nodes(p) AS node
RETURN node;

通过正确定义路径变量,你可以成功执行多跳查询并获取路径长度信息。

posted @ 2025-07-28 14:25  郭慕荣  阅读(33)  评论(0)    收藏  举报