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

pal*_*lom 1 javascript-engine gremlin groovyscriptengine janusgraph

我用janus-plugin初始化gremlin-script-engine:

GremlinScriptEngineManager engineManager = new DefaultGremlinScriptEngineManager();
engineManager.addPlugin(JanusGraphGremlinPlugin.instance());
engine = engineManager.getEngineByName("gremlin-groovy");
Run Code Online (Sandbox Code Playgroud)

引擎通常使用一些janus元素(例如Multiplicity.ONE2MANY)来评估查询:

qu = "mgmt.makeEdgeLabel('"+ TEST_EDGE_LABEL+"').multiplicity(ONE2MANY).make();";
engine.evalWithManagementTransaction(qu);
Run Code Online (Sandbox Code Playgroud)

...但是对于查询:

qu = "mgmt.makePropertyKey('"+TEST_PROPERTY_KEY+"')"
        + ".dataType(String.class).cardinality(Cardinality.SINGLE).make();";
Run Code Online (Sandbox Code Playgroud)

我得到:

MissingPropertyException: No such property: SINGLE for class: org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality
Run Code Online (Sandbox Code Playgroud)

似乎脚本引擎尝试使用 org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality而不是janus one org.janusgraph.core.Cardinality

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

如何删除tinkerpop导入或强制脚本引擎从插件中使用janus导入...还是更改gremlin查询有意义?

ste*_*tte 5

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

gremlin> import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality as Card
gremlin> Card
==>class org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality
Run Code Online (Sandbox Code Playgroud)

但是出于某种原因,我认为这不适用于Gremlin ScriptEngine。我认为我们没有公开过别名的功能。

我认为您必须使用的完整类名org.janusgraph.core.Cardinality.SINGLE。当然,我想知道为什么您要用这种方式进行模式修改。通常,架构修改是管理功能,您可以在之外进行处理,GremlinScriptEngine并且可以直接在代码或控制台中以脚本的形式进行处理。