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

使用Gremlin在Amazon Neptune中实现顶点模式分析与匹配查询

Gremlin查询实现方案

核心逻辑

遍历所有匹配指定顶点序列的路径,计算序列相邻顶点之间插入的顶点总数,按总数升序排序后取最小值对应的完整会话路径。

可直接使用的查询语句

// 定义待匹配的目标顶点序列,可自行替换为实际需求值
g.withSideEffect('targetSeq', [1,2,3])
  // 从目标序列的第一个顶点启动遍历
  .V(select('targetSeq').unfold().limit(1))
  .repeat(
    // 沿会话流转的next边遍历,添加simplePath避免环路提升性能
    out('next').simplePath().as('step')
  )
  .until(
    // 匹配到目标序列的最后一个顶点
    hasId(select('targetSeq').tail(local))
    // 校验路径中完整包含整个目标序列
    .and().path().map(unfold().id().is(within(select('targetSeq'))).count()).is(eq(select('targetSeq').count(local)))
  )
  // 组装返回字段:插入顶点数、会话ID、匹配到的路径
  .project('insertCount','sessionId','matchPath')
    // 插入顶点数计算逻辑:总路径长度 - 目标序列长度
    .by(path().count(local).minus(select('targetSeq').count(local)))
    .by(outE('next').values('SESSION_ID').limit(1))
    .by(path().unfold().id().fold())
  // 按插入顶点数升序排序,取最小的那条
  .order().by('insertCount', asc)
  .limit(1)
  // 可选:如需返回整个会话的完整路径(包含目标序列之前的节点),启用下面的choose步骤
  /*
  .choose(
    select('sessionId'),
    V().outE('next').has('SESSION_ID', select('sessionId')).otherV().path().unfold().id().fold(),
    select('matchPath')
  )
  */

适配调整说明

  • 若顶点的业务标识存储在A属性而非顶点ID中,将查询中所有hasId()替换为has('A', xxx),id()替换为values('A')即可
  • 若边的标签不是next,替换为实际使用的边标签
  • 替换targetSeq的数组值为你需要匹配的任意顶点序列即可

样例验证

针对你给出的示例数据,该查询会计算得到两个匹配路径的插入顶点数:

  • [1,2,5,6,3]的插入顶点数为2
  • [11,12,1,2,3]的插入顶点数为0
    最终会返回插入数更小的[11,12,1,2,3],完全符合预期输出。

内容的提问来源于stack exchange,提问作者Anish Giri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:02