TinkerPop有关框架:查询顶点根据接口类型(Tinkerpop Frames: Query v

2019-10-22 15:33发布

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

假设我有一个类AB ,我想添加一个新的这样:

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

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

这样做失败了,因为它返回的所有顶点(包括AB )。

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

是否有任何可能的方式来做到这一点。 我试图检查文档和测试案例,没有运气。 我怎样才能retreive类型的顶点列表A唯一的

Answer 1:

这个问题看起来像它的副本- 如何找到与TinkerPop有关框架特定类的顶点 (今天也问)。

据我了解,在TinkerPop有关框架架构作为围绕顶点的包装类。 顶点是不实际存储为接口类。 因此,我们需要一种方法来确定顶点作为一个特定的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)


文章来源: Tinkerpop Frames: Query vertices based on interface type