当我在TinkerGrapg中存储一个顶点时,我发现id很长:
{TinkerVertex@7955} "v[304]"
当我这样做时:
graph.V(304).next();
它不起作用!
当我这样做时:
graph.V("304").next();
它不起作用!
当我这样做时:
graph.V(304l).next();
或
graph.V(new Long(304)).next();
它有效!
我试图对TinkerGraph和DSE Graph使用相同的Gremlin代码。问题是一个返回long
而另一个返回字符串
我很好奇我如何能够同时使用int / long和String id同样的Gremlin工作..这是API的问题吗?
谢谢!
答案 0 :(得分:4)
TinkerGraph使用和IdManager
可以将标识符强制转换为不同类型。您可以阅读有关here的更多信息,但基本上如果您希望g.V(1)
和g.V(1L)
都返回您想要配置TinkerGraph的值,如下所示:
gremlin> conf = new BaseConfiguration()
==>org.apache.commons.configuration.BaseConfiguration@552518c3
gremlin> conf.setProperty('gremlin.tinkergraph.vertexIdManager',"LONG")
gremlin> graph = TinkerGraph.open(conf)
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV(id, 1L)
==>v[1]
gremlin> g.addV(id, 2)
==>v[2]
gremlin> g.V(1)
==>v[1]
gremlin> g.V(1L)
==>v[1]
gremlin> g.V(2L)
==>v[2]
gremlin> g.V(2)
==>v[2]
事实上,使用IdManager
:
gremlin> g.V("2")
==>v[2]
如果您愿意,可以为TinkerGraph指定自己的IdManager
实现 - 只需为配置提供完全限定的类名(即代替“LONG”)。