【问题标题】:Tinkerpop, "Multiple" QueryTinkerpop,“多个”查询
【发布时间】:2020-04-08 14:23:20
【问题描述】:

我正在使用这个查询

g.E().as('ID').select('ID').properties().as('PROP').select('PROP','ID')

它搜索所有具有属性的边,但忽略所有没有属性的边。

我想知道如何改进此查询以搜索具有和不具有属性的每个边缘并提供边缘的所有数据(例如 ID、SourceVertic、TargetVertic、标签和属性)。

【问题讨论】:

    标签: graph gremlin tinkerpop tinkerpop3


    【解决方案1】:

    通常,如果您有很多边,则查看图中的所有边可能会很昂贵。在大图上执行此操作通常不是一个好主意。我在下面的示例中使用了一个限制步骤,这是查看某些边缘的一种方法。但是,也就是说,您可以使用valueMap 查看边缘上的所有属性。例如(根据我的跟踪足球比赛的图表):

    gremlin> g.E().valueMap().with(WithOptions.tokens).limit(5)
    ==>[id:400,label:played,date:12 Apr 2014,result:1-0]
    ==>[id:401,label:played,date:12 Apr 2014,result:1-0]
    ==>[id:402,label:played,date:12 Apr 2014,result:0-1]
    ==>[id:403,label:played,date:12 Apr 2014,result:1-0]
    ==>[id:404,label:played,date:12 Apr 2014,result:0-1] 
    

    编辑添加:

    如果您想在结果中包含相邻顶点,并且您使用的图形数据库支持 3.4.4 或更高级别的 Apache TinkerPop,您可以使用elementMap 步骤。下面是一个例子。

    gremlin> g.E().limit(5).elementMap()
    ==>[id:34,label:member,IN:[id:1,label:EPL],OUT:[id:2,label:Team],years:22]
    ==>[id:35,label:member,IN:[id:1,label:EPL],OUT:[id:3,label:Team],years:22]
    ==>[id:36,label:member,IN:[id:1,label:EPL],OUT:[id:4,label:Team],years:22]
    ==>[id:37,label:member,IN:[id:1,label:EPL],OUT:[id:5,label:Team],years:22]
    ==>[id:38,label:member,IN:[id:1,label:EPL],OUT:[id:6,label:Team],years:22] 
    

    如果您使用的数据库不支持elementMap,您需要执行以下操作:

    gremlin> g.E().limit(5).
    ......1>       project('EDGE','IN','OUT').
    ......2>         by(valueMap().with(WithOptions.tokens)).
    ......3>         by(inV().union(id(),label()).fold()).
    ......4>         by(outV().union(id(),label()).fold())   
    ==>[EDGE:[id:34,label:member,years:22],IN:[1,EPL],OUT:[2,Team]]
    ==>[EDGE:[id:35,label:member,years:22],IN:[1,EPL],OUT:[3,Team]]
    ==>[EDGE:[id:36,label:member,years:22],IN:[1,EPL],OUT:[4,Team]]
    ==>[EDGE:[id:37,label:member,years:22],IN:[1,EPL],OUT:[5,Team]]
    ==>[EDGE:[id:38,label:member,years:22],IN:[1,EPL],OUT:[6,Team]]  
    

    【讨论】:

    • 是的,但我的问题是显示所有属性。 valueMap().with(WithOptions.tokens) 显示 id 标签和属性,但不显示 Vertex Source 和 Target
    • elementMap() 将显示源/目标 - tinkerpop.apache.org/docs/current/reference/#elementmap-step 但并非所有图表都支持这一点。如果elementMap() 不可用,我认为您需要使用project()
    • 嗯,好的。当我阅读您的原始问题时,我错过了您还想要输出中的相邻顶点。我将编辑答案。
    • 非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多