1

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

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

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

查询算法的输入是idvertex的属性A

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

更准确地说,我想有效地检索边缘属性之间的对((prop1, numberD)如果边缘具有此属性),并且是来自.prop1A -> BnumberDnumberD

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

只检索顶点很容易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 实现此(可能使用多个查询)有任何建议吗?谢谢!

4

1 回答 1

2

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

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]

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

于 2013-10-29T02:38:53.083 回答