TinkerPop Gremlin如何实现直到步骤

我需要遍历遍历,直到找不到更多新的边缘。在gremlin console / groovy中,我通过传递始终返回false的lambda来实现这一点。

g.V(7).
  repeat(out().not(hasLabel('region','business')).simplePath()).
  until(outE().count().is(0)).
  repeat(both().not(hasLabel('region','business')).dedup()).
  emit().until{t -> false}.
  where(hasLabel('account'))

当我尝试从Java应用程序使用相同的方法并连接到AWS Neptune实例时,出现异常,指出该命令无法发送到服务器...

GraphTraversal t =
    g.V(uid).union(__.identity(),__.repeat(__.out().not(__.hasLabel("region","business")).simplePath()).
            until(__.outE().limit(1).count().is(0)).
            repeat(__.both().not(__.hasLabel("region","business")).simplePath()).
            until(x -> false).emit(__.hasLabel("account")));

我了解,我需要注册Java Lambda,并且可能谓词为可序列化的,但无法弄清楚语法。另外,如何使用“ serializer”将其添加到群集构建器中?

完整堆栈跟踪:

线程“ main” io.netty.handler.codec.EncoderException中的异常: org.apache.tinkerpop.gremlin.driver.exception.ResponseException:一个 此请求的序列化期间发生错误[RequestMessage {, requestId = 28cd3e32-306a-457e-a6d2-2dc5bc9797d8,op ='bytecode', 处理器=“遍历”,参数= {gremlin = [[],[V(A_639008103873), union([[],[identity()]],[[],[repeat([[],[out(),not([[], [hasLabel(region,business)]]),simplePath()]]),直到([[[],[outE(), limit(1),count(),is(0)]]),重复([[],[both(),not([[], [hasLabel(region,business)]]),simplePath()]]), 直到(org.saswata.Main$$Lambda$34/1735507635@6110020d),发出([[], [hasLabel(aws_account)]]]]])]],别名= {g = g}}}]-不能 发送到服务器-原因: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: java.lang.IllegalArgumentException:未注册类: org.saswata.Main $$ Lambda $ 34/1735507635注意:注册此类 使用:kryo.register(org.saswata.Main $$ Lambda $ 34 / 1735507635.class);在 io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:106) 在 io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) 在 io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730) 在 io.netty.channel.AbstractChannelHandlerContext.access $ 1900(AbstractChannelHandlerContext.java:38) 在 io.netty.channel.AbstractChannelHandlerContext $ AbstractWritetask.write(AbstractChannelHandlerContext.java:1081) 在 io.netty.channel.AbstractChannelHandlerContext $ WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1128) 在 io.netty.channel.AbstractChannelHandlerContext $ AbstractWritetask.run(AbstractChannelHandlerContext.java:1070) 在 io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:404) 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:465)处 io.netty.util.concurrent.SingleThreadEventExecutor $ 5.run(SingleThreadEventExecutor.java:884) 在java.lang.Thread.run(Thread.java:748)造成原因: org.apache.tinkerpop.gremlin.driver.exception.ResponseException:一个 此请求的序列化期间发生错误[RequestMessage {, requestId = 28cd3e32-306a-457e-a6d2-2dc5bc9797d8,op ='bytecode', 处理器=“遍历”,参数= {gremlin = [[],[V(A_639008103873), union([[],[identity()]],[[],[repeat([[],[out(),not([[], [hasLabel(region,business)]]),simplePath()]]),直到([[[],[outE(), limit(1),count(),is(0)]]),重复([[],[both(),not([[], [hasLabel(region,business)]]),simplePath()]]), 直到(org.saswata.Main$$Lambda$34/1735507635@6110020d),发出([[], [hasLabel(aws_account)]]]]])]],别名= {g = g}}}]-不能 发送到服务器-原因: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: java.lang.IllegalArgumentException:未注册类: org.saswata.Main $$ Lambda $ 34/1735507635注意:注册此类 使用:kryo.register(org.saswata.Main $$ Lambda $ 34 / 1735507635.class);在 org.apache.tinkerpop.gremlin.driver.handler.WebSocketGremlinRequestEncoder.encode(WebSocketGremlinRequestEncoder.java:63) 在 org.apache.tinkerpop.gremlin.driver.handler.WebSocketGremlinRequestEncoder.encode(WebSocketGremlinRequestEncoder.java:40) 在 io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:88) ...还有11个

与此同时,我通过使用hack检查直到参数hasLabel('fake')中不存在的标签来解决该问题

iCMS 回答:TinkerPop Gremlin如何实现直到步骤

您会看到HERE Neptune不支持lambdas步骤。 因此,您不能使用这种语法。

在您的用例中,您根本不需要until步骤。如果您不使用它,则repeat步骤将继续进行,直到达到空遍历为止。

示例:https://gremlify.com/8es7aelrr4n

本文链接:https://www.f2er.com/1941398.html

大家都在问