1

我以这种方式使用 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枚举的值(例如 just SINGLE),那么一切正常。

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

4

1 回答 1

5

在控制台中,您可以使用别名:

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

于 2018-02-28T19:52:43.703 回答