【问题标题】:create complex gremlin-java query创建复杂的 gremlin-java 查询
【发布时间】:2013-11-07 21:09:24
【问题描述】:

我在 Titan 图形数据库中实现了模型,关系如下:

[A] ---(e1)---> [B] <---(e2)--- [C] ---(e3)---> [D]
 |      |        |       |       |      |        |
prop:id |    prop:number |       | label:e3      |
        |                |    prop:id            |
   label:e1         label:e2                 prop:number
    prop:prop1

A 和B 是“主要顶点”(例如用户),顶点B 和C 是描述与用户相关的一些数据的“不太重要的顶点”。

查询算法的输入是顶点A的属性id。

我想找到所有这样的顶点D,它们以上面显示的方式与A 连接。更要记住A和B之间的边e1的属性prop1。

更准确地说,我想有效地检索对(prop1, numberD) 其中prop1 是A -&gt; B 之间的边缘属性(如果边缘具有此属性),而numberD 是属性number 来自@987654339 @。

我不知道如何有效地实现这个查询。

很容易只检索顶点D(使用GremlinPipes):

pipe
.start(startVertex)
.outE("e1")
.inV().hasProperty("number")
.inE("e2")
.outV().hasProperty("id")
.outE("e3")
.inV().hasProperty("number");

但是当我还需要获取边 e1 并将它们与顶点 D 匹配时,就会出现问题。 我尝试分别计算所有这些步骤,但似乎效率很低。

您对如何使用 gremlin-java 或 gremlin-groovy 实现此(可能使用多个查询)有任何建议吗? 谢谢!

【问题讨论】:

    标签: gremlin titan


    【解决方案1】:

    看看这里描述的模式匹配模式:

    https://github.com/tinkerpop/gremlin/wiki/Pattern-Match-Pattern

    startVertex.outE('e1').as('e')
    .inV().hasProperty('number').inE("e2")
    .outV().hasProperty("id")
    .outE("e3")
    .inV().hasProperty("number").as('d')
    .table(t)
    

    这应该给出地图的迭代器

    [e:e1, d:D]

    您可以从这些地图中的每一个中轻松提取您感兴趣的属性。

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多