【问题标题】:Tinkerpop3 - degree centralityTinkerpop3 - 度中心性
【发布时间】:2017-04-09 03:42:22
【问题描述】:

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

【问题讨论】:

  • 你显示的结果 - 是 GraphSON 吗?
  • 这是来自 Gremlin 服务器 Stephen 的响应。
  • 刚刚检查过,是的,它是 GraphSON。这是序列化器; org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0

标签: titan gremlin tinkerpop3 gremlin-server


【解决方案1】:

您可能正在寻找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)。

另见:

【讨论】:

  • 我确实需要一个可以扩展的查询。如果我需要排序,我的问题中的度中心性配方是否也会遍历所有顶点?
  • 您通常不希望在大型图(数十/数百/更多数百万个顶点)上执行不使用索引的遍历,除非您在 OLAP style 中执行它们 考虑使用 spark-gremlin例如。好消息是,无论您以 OLTP 还是 OLAP 执行遍历,Gremlin 语句都保持不变。只有它的配置发生变化。
  • 还有一些 recipes 用于演示复杂的 Gremlin 语句,并不总是适用于大规模图(例如,即使在 OLAP 中,也尝试在非常大的图上执行中介配方,给定计算复杂性可能会导致问题——对于任何图形数据库或查询语言的任何中介算法来说都是一个问题)。我们知道这可能会造成混淆,并正在努力改进食谱,以使食谱超出教育范围并以任何规模进入实际用途。
  • 谢谢斯蒂芬。由于这个原因,我肯定很困惑并且可能高估了我的图形数据库功能。不过没关系,我将坚持 OLTP 查询的本地遍历,并根据您对全局样式查询的建议提出另一种解决方案。谢谢。
【解决方案2】:

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 正在努力改善这个问题,但我预计不会很快解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多