Tinkerpop3 - 度中心

时间:2017-04-09 03:42:22

标签: titan gremlin tinkerpop3 gremlin-server

我希望找到最喜欢的节点,所以基本上是学位中心性配方。这种查询有效,但我想返回完整的顶点(包括属性),而不仅仅是id。

(我正在使用Tinkerpop 3.0.1孵化)

g.V()
  .where( inE("likes") )
  .group()
  .by()
  .by( inE("likes").count() )

结果

{
  "8240": [
    2
  ],
  "8280": [
    1
  ],
  "12376": [
    1
  ],
  "24704": [
    1
  ],
  "40976": [
    1
  ]
}

2 个答案:

答案 0 :(得分:3)

您可能正在寻找order步骤,使用传递给by()调制器的匿名遍历:

g.V().order().by(inE('likes').count(), decr)

注意:这将需要迭代Titan v1.0.0中的所有顶点,并且无法优化此查询,它只能在OLTP中的较小图形上工作。

获得最喜欢的10个:

g.V().order().by(inE('likes').count(), decr).limit(10)

如果您想获取完整的属性,只需在查询中链接.valueMap().valueMap(true)(对于idlabel)。

另见:

答案 1 :(得分:1)

GraphSON,因为它是基于JSON的,不支持将复杂对象转换为键。 JSON中的键必须基于字符串,并且在本例中,不能是映射。为了解决这个JSON限制,GraphSON通过Java的toString()转换为密钥的复杂对象,或者通过其他方法转换某些对象,如图元素(返回元素标识符的字符串表示,解释为什么你收到了你做的输出。)

如果要在使用GraphSON时返回元素的属性,则必须找出解决方法。在这种特定情况下,您可以这样做:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().group().
......1>         by(id).
......2>         by(union(__(), outE('knows').count()).fold())
==>[1:[v[1],2],2:[0,v[2]],3:[v[3],0],4:[0,v[4]],5:[v[5],0],6:[0,v[6]]]

通过这种方式,您可以获得顶点标识符作为地图ID,并在值中获得完整顶点加上计数。 TinkerPop正在努力改善这个问题,但我不希望快速修复。