Neo4j 通过java查询gremlin

Neo4j 通过java查询gremlin,neo4j,gremlin,Neo4j,Gremlin,我必须在java中使用一个查询gremlin,我不知道该怎么做,因为我已经尝试按照 但我没有结果,只有例外。谁来帮帮我 以下是我必须使用的查询示例: g.V.filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge. 我尝试了官方文

我必须在java中使用一个查询gremlin,我不知道该怎么做,因为我已经尝试按照 但我没有结果,只有例外。谁来帮帮我

以下是我必须使用的查询示例:

 g.V.filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge.
我尝试了官方文件建议的两种方法。 编译Gremlin Groovy:

    Pipe pipe = Gremlin.compile("_().filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge");
    pipe.setStarts(g.getVertices());
我得到一个java.lang.NoSuchFieldError:asMap

使用JSR 223 GremlingRoovyScript引擎:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("gremlin-groovy");
    List results = new ArrayList();
    Bindings bindings = engine.createBindings();
    bindings.put("g", g);
    bindings.put("v", g.getVertices()); 
    engine.eval("v.filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge", bindings);
我得到一个javax.script.ScriptException,其中有一条消息:

<p>groovy.lang.MissingMethodException:</p>
<p>No signature of method: com.tinkerpop.blueprints.impls.neo4j.Neo4jVertexIterable.filter() is applicable for argument types:
</div>
<div>
    (Script1$_run_closure1) values: [Script1$_run_closure1@5bcf59f5]
    </p>
    <p>Possible solutions: find(), first(), find(groovy.lang.Closure), sleep(long), with(groovy.lang.Closure) at
        com.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:110) at
        javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)</p>
</div>
groovy.lang.MissingMethodException:

方法com.tinkerpop.blueprints.impls.neo4j.neo4jvertextable.filter()的签名不适用于参数类型: (Script1$\u运行\u关闭1)值:[Script1$\u运行_closure1@5bcf59f5]

可能的解决方案:find()、first()、find(groovy.lang.Closure)、sleep(long)、with(groovy.lang.Closure)at GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:110)位于 eval(AbstractScriptEngine.java:233)


在ScriptEngine方法中,如果您更改此行,它是否有效:

engine.eval("v.filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge", bindings);


v
绑定设置为
g.getVertices()
会将其设置为NEO4JVertexable,该NEO4JVertexable无法识别
过滤器
(因为
过滤器将作为管道的一部分)。因此,我的理论和这两个建议都是使用版本2.2评估一个正确形成的管道。

,例外情况是:

java.lang.NoSuchFieldError:ASMAP

在版本2.3中,我得到了以下异常:

线程“main”java.lang.NoSuchMethodError中出现异常:com.tinkerpop.pipes.util.FluentUtility.prepareFunction(Lcom/tinkerpop/pipes/util/structures/AsMap;Lcom/tinkerpop/pipes/PipeFunction;)Lcom/tinkerpop/pipes/PipeFunction


但是,查询在控制台中运行良好。你比我快了一分钟。这应该行得通。在此之前,他使用的是一个
Vertexibable
,而gremlin期望的是一个
管道
对象?你用的是什么版本的小精灵?
engine.eval("g.V.filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge", bindings);
engine.eval("v._().filter{it.AffiliatedDepartment != null}.copySplit(_().DepartmentDirector, _().inE.filter{it.label == 'Affiliated_Professor'}.outV.AffiliatedProfessor).fairMerge", bindings);