You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析这段Gremlin多节点与边遍历查询语句?

Gremlin多节点与边遍历查询解析

对应遍历路径

该查询要匹配的图遍历路径为:
A(节点)<--W(边)<--B(节点)-->X(边)-->C(节点)-->Y(边)-->D(节点)<--Z(边)<--E(节点)

查询代码

g.V().hasLabel("A").as("A").
inE("W").as("W").
outV().
hasLabel("B").as("B").
outE("X").as("X").
inV().
hasLabel("C").as("C").
outE("Y").
has("Y property","10000").as("Y").
inV().
hasLabel("D").as("D").
inE("Z").as("Z").
outV().
hasLabel("E").as("E").
select("A","W","B","X","C","Y","Y","D","Z","E")
.by(valueMap()).toList()

执行逻辑与遍历过程

我们可以把整个查询按执行顺序拆解为以下步骤,每一步对应图中节点/边的匹配逻辑:

  • 起始节点定位:g.V().hasLabel("A").as("A")
    从图中所有节点里筛选出标签为A的节点,并用as("A")给该节点绑定别名,方便后续引用。
  • 反向遍历边W到节点B:inE("W").as("W").outV().hasLabel("B").as("B")
    1. inE("W"):从节点A出发,遍历所有指向它的、标签为W的入边,绑定别名W;
    2. outV():从这条W边出发,找到边的起点(即W边连接的另一端节点);
    3. hasLabel("B").as("B"):筛选该起点节点标签为B,并绑定别名B。
  • 正向遍历边X到节点C:outE("X").as("X").inV().hasLabel("C").as("C")
    1. outE("X"):从节点B出发,遍历所有从它指向外部的、标签为X的出边,绑定别名X;
    2. inV():从这条X边出发,找到边的终点;
    3. hasLabel("C").as("C"):筛选终点节点标签为C,绑定别名C。
  • 带属性条件遍历边Y到节点D:outE("Y").has("Y property","10000").as("Y").inV().hasLabel("D").as("D")
    1. outE("Y"):从节点C出发,遍历标签为Y的出边;
    2. has("Y property","10000"):额外筛选出Y property属性值为10000的Y边,绑定别名Y;
    3. inV():找到这条Y边的终点;
    4. hasLabel("D").as("D"):筛选终点节点标签为D,绑定别名D。
  • 反向遍历边Z到节点E:inE("Z").as("Z").outV().hasLabel("E").as("E")
    1. inE("Z"):从节点D出发,遍历所有指向它的、标签为Z的入边,绑定别名Z;
    2. outV():从这条Z边出发,找到边的起点;
    3. hasLabel("E").as("E"):筛选该起点节点标签为E,绑定别名E。
  • 结果提取与格式化:select("A","W","B","X","C","Y","Y","D","Z","E").by(valueMap()).toList()
    1. select(...):按照指定的别名顺序,提取之前绑定的所有节点和边(注意这里重复指定了Y,最终结果会包含两份Y边的属性信息);
    2. .by(valueMap()):指定提取每个元素的所有属性键值对;
    3. .toList():将最终匹配结果转换为列表形式返回。

内容的提问来源于stack exchange,提问作者Ankit Soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:07:18