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

在Amazon Neptune中用TinkerPop3的Gremlin查询连接顶点信息

Gremlin查询:将出边结果中的边ID替换为目标顶点ID

要实现将出边结果里的边ID替换为对应目标顶点ID的需求,可以通过以下两种方式修改你的Gremlin查询:

方式一:使用project精确控制返回结构

适合需要固定返回label、p、vertex_id三个字段的场景:

GraphTraversal<Vertex, Map<Object, Object>> x = g.V("694837")
    .outE()
    .as("edge")
    .inV()
    .project("label", "p", "vertex_id")
    .by(__.select("edge").label())
    .by(__.select("edge").values("p").orElse(null))
    .by(T.id);

步骤说明:

  1. outE().as("edge"):遍历起始顶点的所有出边,并将边标记为edge以便后续引用
  2. inV():获取每条出边连接的目标顶点
  3. project(...):构造指定键的结果Map
  4. 三个by()分别为label赋值边的标签、为p赋值边的p属性(无该属性时返回null)、为vertex_id赋值目标顶点的ID

方式二:使用map动态保留所有边属性

如果需要保留边的所有原有属性(不限于p),仅替换边ID为顶点ID,可使用自定义映射:

GraphTraversal<Vertex, Map<Object, Object>> x = g.V("694837")
    .outE()
    .as("edge")
    .inV()
    .map(traversal -> {
        Edge edge = traversal.get("edge");
        // 获取边的所有属性和标签
        Map<Object, Object> result = new HashMap<>(edge.valueMap());
        result.put("label", edge.label());
        // 移除边ID,添加目标顶点ID
        result.remove(T.id);
        result.put("vertex_id", traversal.get().id());
        return result;
    });

步骤说明:

  1. 同样先遍历出边并标记,获取目标顶点
  2. 通过map()自定义处理逻辑:
    • 获取边的所有属性并添加边标签
    • 删除原有边ID字段
    • 添加vertex_id字段并赋值为目标顶点ID

两种方式最终返回的结果都会符合你期望的格式,例如:

[  
  {label=match, p=0.69, vertex_id=39085}, 
  {label=match, p=0.4,  vertex_id=482928}, 
  {label=has,           vertex_id=TL}, 
  ...
]

内容的提问来源于stack exchange,提问作者Scott Lewis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:05:28