我在 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
是描述与用户相关的一些数据的“不太重要的顶点”。
查询算法的输入是id
vertex的属性A
。
我想找到所有这样的顶点D
,它们A
以上面显示的方式连接。更重要的是,我想记住和之间prop1
的边的性质。e1
A
B
更准确地说,我想有效地检索边缘属性之间的对((prop1, numberD)
如果边缘具有此属性),并且是来自.prop1
A -> B
numberD
number
D
我不知道如何有效地实现这个查询。
只检索顶点很容易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 实现此(可能使用多个查询)有任何建议吗?谢谢!