如何使用 Tinkerpop 框架查找特定 class 的顶点
How to Find Vertices of Specific class with Tinkerpop Frames
我有一个具有不同 classes 顶点的 FramedGraph 对象,例如 Person 和 Location。我想检索 "Person" class 的所有顶点。这是我目前的方法。
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;
}
这感觉效率极低,因为我遍历所有顶点,然后一次返回一个顶点。我研究了使用 Gremlin 语法,但我看不到如何通过 Frames class 进行限制。有没有更高效的检索方法?谢谢..
据我了解,Tinkerpop Frame 框架充当顶点周围的包装器 class。顶点实际上并未存储为界面 class。因此,我们需要一种方法来将顶点识别为特定的 type
.
我的解决方案是,我在框架 class 中添加了 @TypeField
和 @TypeValue
注释。然后我使用这些值来查询我的 FramedGraph
.
可以在此处找到这些注释的文档:https://github.com/tinkerpop/frames/wiki/Typed-Graph
示例代码
@TypeField("type")
@TypeValue("person")
interface Person extends VertexFrame { /* ... */ }
然后通过像这样添加 TypedGraphModuleBuilder
来定义 FramedGraphFactory
。
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);
我不确定这是最 efficient/succinct 的解决方案(我想看看@stephen mallette 的建议)。它目前不可用,但能够执行以下操作是合乎逻辑的:
// framedGraph.getVertices(Person.class)
这个问题看起来和这个问题一样(看起来你是第一个)- Tinkerpop Frames: Query vertices based on interface type.
我有一个具有不同 classes 顶点的 FramedGraph 对象,例如 Person 和 Location。我想检索 "Person" class 的所有顶点。这是我目前的方法。
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;
}
这感觉效率极低,因为我遍历所有顶点,然后一次返回一个顶点。我研究了使用 Gremlin 语法,但我看不到如何通过 Frames class 进行限制。有没有更高效的检索方法?谢谢..
据我了解,Tinkerpop Frame 框架充当顶点周围的包装器 class。顶点实际上并未存储为界面 class。因此,我们需要一种方法来将顶点识别为特定的 type
.
我的解决方案是,我在框架 class 中添加了 @TypeField
和 @TypeValue
注释。然后我使用这些值来查询我的 FramedGraph
.
可以在此处找到这些注释的文档:https://github.com/tinkerpop/frames/wiki/Typed-Graph
示例代码
@TypeField("type")
@TypeValue("person")
interface Person extends VertexFrame { /* ... */ }
然后通过像这样添加 TypedGraphModuleBuilder
来定义 FramedGraphFactory
。
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);
我不确定这是最 efficient/succinct 的解决方案(我想看看@stephen mallette 的建议)。它目前不可用,但能够执行以下操作是合乎逻辑的:
// framedGraph.getVertices(Person.class)
这个问题看起来和这个问题一样(看起来你是第一个)- Tinkerpop Frames: Query vertices based on interface type.