如何在 gremlin groovy 脚本引擎初始化期间用 janus-graph 导入替换 tinkerpop 导入



我用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 一个org.janusgraph.core.Cardinality.

PS:如果我在查询中使用类 org.janusgraph.core.Cardinality.SINGLE 的全名或仅使用Cardinality枚举的值(例如只是 SINGLE (,那么一切正常。

我如何删除 tinkerpop 导入或强制脚本引擎从插件中使用 janus 导入......或者改变小精灵查询有意义?

在控制台中,您可以执行和别名:

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之外处理,更直接地在代码或控制台中作为脚本处理。

最新更新