Как добавить несколько вершин и ребер в одном обходе и вернуть подмножество из них, используя DSE Graph:

Цель: я пытаюсь добавить несколько вершин и ребер в один обход и вернуть их подмножество.

Возможно, что свободный API все еще находится в бета-версии или что я не правильно понял API:

Я думаю, что есть проблема с.select () и GraphResultSet one () и all (), но вот что я попробовал:

GraphTraversal<Vertex,Vertex> traversal = g.addV("Entity").property("uuid","testuuid").as("a")
            .addV("Entity").property("uuid","testuuid3").as("b");
            GraphStatement graphStatement =  DseGraph.statementFromTraversal(traversal.select("a","b"));
            GraphResultSet grs = dseSession.executeGraph(graphStatement.setGraphName("graph"));

Я создаю две вершины a, b и выбираю обе из них.. если я выбираю только одну grs.one().as(Vector.class) работает нормально... но теперь, когда я выбираю a и b... grs.one () и grs.all () возвращают оба результата в списке [] и в obj {} .. iterator() не работать правильно, так как grs.all (). count () равен 1.. поэтому я не могу получить то, что мне нужно... при условии, что grs.all () возвращает итератор для двух вещей, а grs.one () возвращает первое,

grs.all () возвращает что-то вроде этого:

[{a=DefaultVertex{id={~label=Entity, community_id=903802240, member_id=515}, label=Entity, properties=com.google.common.collect.Iterators$3@3670f00}, b=DefaultVertex{id={~label=Entity, community_id=903802240, member_id=516}, label=Entity, properties=com.google.common.collect.Iterators$3@452e26d0}}]

grs.one () возвращает что-то вроде этого:

{a=DefaultVertex{id={~label=Entity, community_id=1220980480, member_id=514}, label=Entity, properties=com.google.common.collect.Iterators$3@10b892d5}, b=DefaultVertex{id={~label=Entity, community_id=1220980480, member_id=515}, label=Entity, properties=com.google.common.collect.Iterators$3@3d3f761a}}

Изменить (пытается перебрать несколько вещей в одной строке (см. Комментарии):

   GraphNode ga = grs.all().iterator().next(); // this contains both a and b 
   System.out.println(ga.getClass()); // this is ObjectGraphNode :/

Я использую:

<dependency>
   <groupId>com.datastax.cassandra</groupId>
   <artifactId>dse-driver</artifactId>
   <version>1.1.1-beta1</version>
</dependency>
<dependency>
   <groupId>com.datastax.cassandra</groupId>
   <artifactId>java-dse-graph</artifactId>
   <version>1.0.0-beta1</version>
</dependency>

Любая помощь приветствуется!

1 ответ

Решение

Я не уверен, что вы ожидаете, но select("a","b") должен возвращать обе вершины в одной "строке". Оба результата, для all() а также one()хорошо выглядишь для меня.

Вот дикая догадка; вы, вероятно, ищете что-то вроде этого:

g.addV("Entity").property("uuid","testuuid").union(identity(),
  addV("Entity").property("uuid","testuuid3"))

Этот обход создаст 2 вершины и вернет их в 2 отдельных ряда.

ОБНОВИТЬ

После выяснения в комментариях ниже, что сценарий использования должен был перебрать записи карты, возвращенные в GraphNode (который является оберткой для любого объекта, возвращаемого API-интерфейсом DSE), ответ должен быть одним из следующих.

Если вам нужна только первая вершина:

executeGraph(statementFromTraversal(
  g.addV("Entity").property("uuid","testuuid").sideEffect(
    addV("Entity").property("uuid","testuuid3"))).one().asVertex()

Если вам нужна только вторая вершина:

executeGraph(statementFromTraversal(
  g.addV("Entity").property("uuid","testuuid").
    addV("Entity").property("uuid","testuuid3")).one().asVertex()

Если вам нужны все / несколько вершин:

GraphNode n = executeGraph(statementFromTraversal(
  g.addV("Entity").property("uuid","testuuid").as("a").
    addV("Entity").property("uuid","testuuid3").as("b").select("a","b")).one()
n.get("a").asVertex() // work w/ vertex a
n.get("b").asVertex() // work w/ vertex b
Другие вопросы по тегам