Tinkerpop框架:根据接口类型查询顶点

时间:2015-04-14 19:58:23

标签: tinkerpop tinkerpop-frames

我正在使用Tinkerpop Frames来创建一组顶点和边。添加新顶点很简单,但基于类型的后退顶点似乎有点困难。

假设我有一个课程AB,我想添加一个新课程:

framedGraph.addVertex(null, A.class);
framedGraph.addVertex(null, B.class);

这是直截了当的。但是如果我想要检索类型为A的所有顶点呢?

执行此操作失败,因为它返回了所有顶点(AB)。

framedGraph.query().vertices(A.class);

有没有办法做到这一点。我试图检查文件和测试用例没有运气。如何仅检索A类型的顶点列表

1 个答案:

答案 0 :(得分:0)

这个问题看起来像是How to Find Vertices of Specific class with Tinkerpop Frames的重复(今天也会被问到)。

据我所知,Tinkerpop Frame框架充当顶点周围的包装类。顶点实际上并不存储为接口类。因此,我们需要一种方法来将顶点标识​​为特定type

我的解决方案,我在框架类中添加了@TypeField@TypeValue注释。然后我使用这些值来查询FramedGraph

可以在此处找到这些注释的文档:https://github.com/tinkerpop/frames/wiki/Typed-Graph

示例代码

@TypeField("type")
@TypeValue("person")
interface Person extends VertexFrame { /* ... */ }

然后通过添加FramedGraphFactory来定义TypedGraphModuleBuilder

static final FramedGraphFactory FACTORY = new FramedGraphFactory(
    new TypedGraphModuleBuilder()
        .withClass(Person.class)
        //add any more classes that use the above annotations. 
        .build()
);

然后检索Person

类型的顶点
Iterable<Person> people = framedGraph.getVertices('type', 'person', Person.class);

我不确定这是最有效/简洁的解决方案(我想看看@stephen mallette的建议)。目前还没有,但能够做到这样的事情是合乎逻辑的:

// framedGraph.getVertices(Person.class)