我希望找到最喜欢的节点,所以基本上是学位中心性配方。这种查询有效,但我想返回完整的顶点(包括属性),而不仅仅是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
]
}
答案 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)
(对于id
和label
)。
另见:
答案 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正在努力改善这个问题,但我不希望快速修复。