我使用cassandra 2.1.7支持的Titan 1.0.0作为后端存储.在尝试在gremlin控制台和java程序上执行相同的查询时,我得到了两种不同格式的输出.我正在使用titan-1.0.0-hadoop1提供的gremlin控制台,对于java我正在使用TinkerPop Gremlin 3.0.1-incubating.
Gremlin控制台:
gremlin> g.V().has('msid',within(-2128958273, 2147477890)).as('in').local(outE('hie_child').has('hostid_e',within(153,83)).order().by('hrank',incr).limit(5)).group().by(outV().id()).by(inV().id().fold())
Run Code Online (Sandbox Code Playgroud)
==> [77467688:[1531850904,4742561976,1009049792,1010020408,1053356264],73363640:[2060075072,3698942184,6776295608,7030726848,35401920]]
我得到了预期的输出类型,即 Map<VertexId, List<VertexId>>
但是在java程序中执行相同的查询时,我得到了Map<VertexId, BulkSet>.的BulkSet包括计数器指示的时间的特定条目在结果集增加的号码.有人可以告诉我是否有办法在java中获得与gremlin控制台类似的结果.
Java的:
List<Map<Object, Object>> list = g.V().has("msid", P.within(-2128958273,2147477890)).as("in").local(__.outE("hie_child").has("hostid_e", P.within(153,83)).order().by("hrank", Order.incr).limit(5)).group().by(__.outV().id()).by(__.inV().id().fold()).fold().next();
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
[{77467688 = {1531850904 = 1,4742561976 = 1,1009049792 = 1,1010000408 = 1,1053356264 = 1},73363640 = {2060075072 = 1,3698942184 = 1,6776295608 = 1,7030726848 = 1,35401920 = 1}} ]
我们正在使用Titan 1.0.0和Cassandra版本3.9.0-1,来自CentOs-7系统上的datastax- ddc.我们看到一些奇怪的问题,例如:
具有相同边ID的多个边,这些边上的少数属性的值不同.
gV().has('msid',6171699).outE('prio_child').has('hostid_e',153).as('e')inV().has('msid',58713376).select( 'e')==> e [ 54ekdatm-1lezwb4-45cl-195s9km8 ] [3471761488-prio_child-> 98305011872] ==> e [ 54ekdatm-1lezwb4-45cl-195s9km8 ] [3471761488-prio_child-> 98305011872]
在应用更多限制后获得更多结果
gV().has('msid',6171699).outE('prio_child').count()
==> 60
gV().has('msid',6171699).outE('prio_child').has('hostid_e,153).count()
==> 66
我甚至尝试过设置ConsistencyModifier.LOCK,正如Titan文档最终一致后端所建议的那样,但它没有帮助.我仍然得到任意结果.