Фреймы Tinkerpop: запрос вершин на основе типа интерфейса
Я использую Tinkerpop Frames
создать набор вершин и ребер. Добавить новую вершину просто, но получение вершин, основанных на типе, кажется немного сложным.
Предположим, у меня есть класс A
а также B
и я хочу добавить новый так:
framedGraph.addVertex(null, A.class);
framedGraph.addVertex(null, B.class);
Это прямо вперед. Но что, если я хочу получить все вершины с типом A
?
Сделать это не удалось, потому что он вернул все вершины (оба A
а также B
).
framedGraph.query().vertices(A.class);
Есть ли возможный способ сделать это. Я попытался проверить документацию и контрольные примеры без удачи. Как я могу получить список вершин типа A
только
1 ответ
Этот вопрос выглядит так, как будто он является дубликатом - Как найти вершины определенного класса с помощью фреймов Tinkerpop (также задаваемых сегодня).
Насколько я понимаю, фреймворк Tinkerpop Frame действует как класс-оболочка для вершины. Вершина фактически не сохраняется как класс интерфейса. Поэтому нам нужен способ идентифицировать вершину как type
,
Мое решение я добавил @TypeField
а также @TypeValue
аннотации к моим классам Frame. Затем я использую эти значения для запроса моего 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)