compile()无法执行在Gremlin控制台中工作的查询
当我在gremlin控制台中执行以下操作时,我得到了预期的结果compile()无法执行在Gremlin控制台中工作的查询,gremlin,titan,Gremlin,Titan,当我在gremlin控制台中执行以下操作时,我得到了预期的结果 g.V('name', 'a').next().query().has('b', GREATER_THAN_EQUAL, 100).orderBy('timestamp', Order.DESC).edges() 现在,我正试图按照Java指南执行同样的操作,但是我无法让它工作 我试过这个 Pipe pipe = Gremlin.compile("_().query().has('b', GREATER_THAN_EQUAL, 1
g.V('name', 'a').next().query().has('b', GREATER_THAN_EQUAL, 100).orderBy('timestamp', Order.DESC).edges()
现在,我正试图按照Java指南执行同样的操作,但是我无法让它工作
我试过这个
Pipe pipe = Gremlin.compile("_().query().has('b', GREATER_THAN_EQUAL, 100).orderBy('timestamp', Order.DESC).edges()");
pipe.setStarts(new SingleIterator<Vertex>(graph.getVertices("name", 'a').iterator().next()));
for(Object name : pipe) {
}
javax.script.ScriptException:javax.script.ScriptException:
groovy.lang.MissingMethodException:没有方法的签名:
com.tinkerpop.gremlin.groovy.gremlingroovypepeline.query是
适用于参数类型:值:[]可能的解决方案:
every,everygroovy.lang.Close,grep,
树[Lcom.tinkerpop.pipes.PipeFunction;,
tree[Lgroovy.lang.Closure;,
treecom.tinkerpop.pipes.util.structures.Tree
还有这个
Pipe pipe = Gremlin.compile("_().next().query().has('b', GREATER_THAN_EQUAL, 100).orderBy('timestamp', Order.DESC).edges()");
pipe.setStarts(new SingleIterator<Vertex>(graph.getVertices("name", 'a').iterator().next()));
for(Object name : pipe) {
}
javax.script.ScriptException:javax.script.ScriptException:
groovy.lang.MissingMethodException:没有方法的签名:
com.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.query
适用于参数类型:值:[]可能的解决方案:
every,everygroovy.lang.Closure,grep,grepjava.lang.Object,
任何,倾倒
有什么想法吗?好的,所以我决定使用GremlinGroovyScriptEngine而不是Gremlin.compile。这种方法也在同一个版本中进行了描述,我实际上更喜欢这种方法,因为它给了我参数化,我不需要修改原始查询,而是将g.替换为u
ScriptEngine engine = new GremlinGroovyScriptEngine();
Bindings bindings = engine.createBindings();
bindings.put("g", graph);
bindings.put("value", 100);
bindings.put("DESC", Order.DESC);
engine.eval("g.V('name', 'a').next().query().has('b', Compare.GREATER_THAN_EQUAL, value).orderBy('timestamp', DESC).edges()", bindings);
我仍然有兴趣知道为什么Gremlin.compile不起作用,希望上面的内容对其他人有所帮助。我觉得这句话很可疑:
Pipe pipe = Gremlin.compile("_().next().query().has('b', GREATER_THAN_EQUAL, 100).orderBy('timestamp', Order.DESC).edges()");
您正试图将一个管道编译成一个管道。换句话说,您先从标识管道开始,然后再将其编译成顶点查询,该查询返回一个迭代器,而不是管道。如果您查看Gremlin的示例,请编译Gremlin s的评估代码tring返回一个管道
Pipe pipe = Gremlin.compile("_().out('knows').name");
我的猜测是,如果您将代码改为未经测试:
Pipe pipe = Gremlin.compile("_().outE.has('b', GREATER_THAN_EQUAL, 100).order{it.b.timestamp <=> it.a.timestamp}");
pipe.setStarts(new SingleIterator<Vertex>(graph.getVertices("name", 'a').iterator().next()));
for(Object name : pipe) {
}
您可能已经取得了一些成功。我想如果成功的话,那么您应该想知道如何重新优化查询,因为我想一些后端可能需要优化顶点查询的orderBy,而order Gremlin步骤只是内存排序