【问题标题】:Gremlin throwing an error while executing the lambdaGremlin 在执行 lambda 时抛出错误
【发布时间】:2018-07-01 07:36:41
【问题描述】:
g.V().hasLabel("OperatingSystem")
            .filter(Lambda.predicate("{it.get().property('name').startsWith('xyz')}")).out("dpend_on")
            .as("ast").out("depend_on").hasLabel("abc")

导致错误:

java.util.concurrent.CompletionException:
org.apache.tinkerpop.gremlin.driver.exception.ResponseException:查询解析在第 1 行失败,字符位置为 0,错误消息:不匹配的输入 '[' 期望 {''''、'""'、'g'}

在 java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
在 java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
在 org.apache.tinkerpop.gremlin.driver.ResultSet.one(ResultSet.java:107)
在 org.apache.tinkerpop.gremlin.driver.ResultSet$1.hasNext(ResultSet.java:159)
在 org.apache.tinkerpop.gremlin.driver.ResultSet$1.next(ResultSet.java:166)
在 org.apache.tinkerpop.gremlin.driver.ResultSet$1.next(ResultSet.java:153)
在 org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:142)
在 org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:127)
在 org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal.nextTraverser(DriverRemoteTraversal.java:108)
在 org.apache.tinkerpop.gremlin.process.remote.traversal.step.map.RemoteStep.processNextStart(RemoteStep.java:80)
在 org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:128)
在 org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:38)
在 org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.next(DefaultTraversal.java:200)

【问题讨论】:

  • 不确定这是否与它有关,但看起来您在 lambda 之后的输出步骤中拼错了“dpend_on”
  • g.V().hasLabel("OperatingSystem") .filter(Lambda.predicate("{it.get().property('name').startsWith('xyz')}")) .count().next();
  • g.V().hasLabel("OperatingSystem") .filter(Lambda.predicate("{it.get().property('name').startsWith('Windows')}")) .count().next();
  • 还是不行 :( .
  • 您可以使用between 步骤模拟startsWith 行为并避免需要lambda。例如has('some_key',between('abc','abd'))

标签: gremlin amazon-neptune


【解决方案1】:

我刚刚看到您使用的是 Amazon Neptune。根据此处的文档,Neptune 不支持 Lambda 步骤:https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html

【讨论】:

  • 它不支持简单的匿名类,然后如何对其应用过滤器查询或如何应用具有谓词。那么如何编写像 startWith ,contains 等查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2020-12-20
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多