Neo4j 通过java查询gremlin
我必须在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. 我尝试了官方文
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);