使用 id 作为 String 与 Long 时,TinkerGraph 检索不一致

TinkerGraph retrieval inconsistency when using ids as String vs Long

当我在 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 代码。问题是一个 returns long 而另一个作为字符串

我很好奇如何让同一个 Gremlin 同时使用 int/long 和字符串 ID。这是 API 的问题吗?

谢谢!

TinkerGraph 使用 IdManager 可以将标识符强制转换为不同的类型。您可以阅读有关 here 的更多信息,但基本上如果您想要 g.V(1)g.V(1L) 都 return 一个值,您需要按如下方式配置 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")。