我在 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是描述与用户相关的一些数据的“不太重要的顶点”。
查询算法的输入是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 实现此(可能使用多个查询)有任何建议吗?谢谢!