我用janus-plugin这样初始化gremlin-script-engine:
GremlinScriptEngineManager engineManager = new DefaultGremlinScriptEngineManager();
engineManager.addPlugin(JanusGraphGremlinPlugin.instance());
engine = engineManager.getEngineByName("gremlin-groovy");引擎通常使用一些janus元素(例如Multiplicity.ONE2MANY)来评估查询:
qu = "mgmt.makeEdgeLabel('"+ TEST_EDGE_LABEL+"').multiplicity(ONE2MANY).make();";
engine.evalWithManagementTransaction(qu);..。但是对于查询:
qu = "mgmt.makePropertyKey('"+TEST_PROPERTY_KEY+"')"
+ ".dataType(String.class).cardinality(Cardinality.SINGLE).make();";我得到了:
MissingPropertyException: No such property: SINGLE for class: org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality似乎脚本引擎尝试使用org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality而不是janus one org.janusgraph.core.Cardinality。
PS:如果我在查询中使用类org.janusgraph.core.Cardinality.SINGLE的全名或者只使用Cardinality枚举的值(例如只使用SINGLE),那么一切都可以正常工作。
如何从插件中删除补丁程序导入或强制脚本引擎使用janus导入...或者更改gremlin-queries是有意义的?
发布于 2018-03-01 03:52:44
在控制台中,您可以执行和别名操作:
gremlin> import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality as Card
gremlin> Card
==>class org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality但出于某种原因,我不认为这会对Gremlin ScriptEngine起作用。我不认为我们已经暴露了别名的能力。
我认为您必须使用org.janusgraph.core.Cardinality.SINGLE的完整类名。当然,我想知道您为什么要以这种方式修改模式。通常,模式修改是在GremlinScriptEngine外部处理的管理功能,更直接地在代码中或在控制台中作为脚本进行处理。
https://stackoverflow.com/questions/49037198
复制相似问题