1

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

(我正在使用 Tinkerpop 3.0.1-incubating)

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

结果

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

2 回答 2

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)(for idand )。label

也可以看看:

于 2017-04-09T12:39:37.007 回答
1

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

如果你想在使用 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 正在努力改善这个问题,但我不希望快速修复。

于 2017-04-11T10:30:45.697 回答