如何找到与TinkerPop有关框架特定类的顶点(How to Find Vertices of S

2019-10-22 15:30发布

我有不同类别的顶点FramedGraph对象,例如人物和地点。 我想找回“人”类的所有顶点。 这是我目前的方法。

    public List<Person> listPeople() {
      List<Person> people = new ArrayList<Person>();
      Iterator iterator =  g.getVertices().iterator();
      while (iterator.hasNext()) {
        Vertex v = (Vertex) iterator.next();
        Person p = (Person) g.getVertex(v.getId(), Person.class);
        people.add(p);
      }
      return people;
   }

因为我遍历所有顶点,然后在同一时间浸渍早在一这种感觉得不得了的低效。 我看着使用小鬼语法,但我不明白如何通过一个框架类来限制。 是否有更有效的检索方法? 谢谢..

Answer 1:

据我了解,在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有关框架:根据接口类型查询顶点 。



文章来源: How to Find Vertices of Specific class with Tinkerpop Frames