如何在Gremlin中缩短where语句?

如何在Gremlin中缩短where语句?,gremlin,graph-databases,amazon-neptune,Gremlin,Graph Databases,Amazon Neptune,我想知道在找到第一个结果时是否可能短路where语句 以下是一个示例查询: g.V().hasLabel('SEAT') where( __.repeat(out('NEXT').simplePath()) .until(loops().is(gte(2))) ) .in('CONTAINS') .dedup() 重复数据消除是必需的,因为给定顶点的多个长度可能在“包含”的内边缘上有一个父节点,而“下一个”的外边缘上有多个顶点链

我想知道在找到第一个结果时是否可能短路where语句

以下是一个示例查询:

g.V().hasLabel('SEAT')
    where(
        __.repeat(out('NEXT').simplePath())
        .until(loops().is(gte(2)))
    )
    .in('CONTAINS')
    .dedup()
重复数据消除是必需的,因为给定顶点的多个长度可能在“包含”的内边缘上有一个父节点,而“下一个”的外边缘上有多个顶点链

我想要的是,在第一次找到满足条件的顶点时,短路where

下面是一个示例图和查询:

关于这一问题的进一步澄清:

如果我将查询更改为使用
路径
而不是
重复数据消除
,结果如下:

[
  [
    {
      "id": 15245,
      "label": "SEAT"
    },
    {
      "id": 15239,
      "label": "SECTION"
    }
  ],
  [
    {
      "id": 15248,
      "label": "SEAT"
    },
    {
      "id": 15239,
      "label": "SECTION"
    }
  ],
  [
    {
      "id": 15257,
      "label": "SEAT"
    },
    {
      "id": 15242,
      "label": "SECTION"
    }
  ],
  [
    {
      "id": 15260,
      "label": "SEAT"
    },
    {
      "id": 15242,
      "label": "SECTION"
    }
  ],
  [
    {
      "id": 15263,
      "label": "SEAT"
    },
    {
      "id": 15242,
      "label": "SECTION"
    }
  ]
]
您可以注意到,对于满足where条件的每个路径(即,具有相同截面顶点的多个结果),都有一个结果(子顶点开始+父顶点)。我希望查询在找到满足where子句的第一条路径后停止处理

基本上,我希望找到每个“截面”顶点,其中在其子顶点上有长度为N或更大的路径

我正在寻找的结果(使用
path
)如下所示:

[
  [
    {
      "id": 15245,
      "label": "SEAT"
    },
    {
      "id": 15239,
      "label": "SECTION"
    }
  ]
  [
    {
      "id": 15257,
      "label": "SEAT"
    },
    {
      "id": 15242,
      "label": "SECTION"
    }
  ]
]

我基本上是在寻找类似于
whereFirst
(如果它确实存在)的东西。

您可以按如下方式重写查询,以过滤where中的重复项

g.V().hasLabel('SEAT').
    where(
        __.repeat(out('NEXT').simplePath().where(without('x')).store('x'))
        .until(loops().is(gte(2)))
    )
    .in('CONTAINS')

如果在查询的末尾放置
路径
步骤,而不是
重复数据消除
,您应该看到,对于每个起始顶点,搜索将在找到一个结果后立即结束。这不是你看到的吗?我尝试了使用您的数据,只看到了每个开始的一个结果(正如您所指出的,可能会有重复的结果),我希望查询在找到满足每个父节点的where条件的单个子顶点链后短路。我不想知道每一条路,我只想知道至少有一条路。例如,使用我的示例,使用
path
我将获得多个截面ID 15239的结果,我希望它在找到满足where条件的顶点子链后,对每个截面顶点短路。好的,谢谢这有助于澄清。您希望不必执行重复数据消除。