Как получить объединенные свойства вершин и ребер с помощью gremlin и janusgraph - PullRequest
0 голосов
/ 25 января 2020

Я использую JanusGraph в качестве графической базы данных в моем приложении для весенней загрузки и хочу сформировать запрос gremlin для получения свойств как исходящего Edge, так и связанной с ним вершины. Я также хочу, чтобы токены (id, label et c) были включены в свойства.

Я хочу java реализацию этого запроса gremlin.

Ответы [ 2 ]

1 голос
/ 25 января 2020

Я думаю, что вы пишете свой запрос лучше с project() (и, если возможно, elementMap()):

g.V("V_ID").outE('OUT_EDGE').
  project('eData','vData').
    by(elementMap())
0 голосов
/ 25 января 2020
List<Map<String, Object>> propertyList = g.V("V_ID")   // Get the vertex
.outE().hasLabel("OUT_EDGE").as("E")                   // Get the outgoing edge as E
.inV().as("V")                                         // Get the vertex(pointed by E) as V
.select("E", "V")                                      // Select Edge E and Vertex V
.by(__.valueMap().with(WithOptions.tokens).unfold()    // Get value map including tokens
.group().by(Column.keys).by(__.select(Column.values).unfold()))  // Form key value pairs
.toList();                                             // Return the list of properties

ПРИМЕЧАНИЕ. Замените токены примеров строк ("V_ID", "OUT_EDGE") в соответствии с вашей реализацией

Приведенный выше запрос вернет все свойства ребер и его связанная вершина в java карте. Карта свойств также будет содержать токены (т. Е. Id, label).

Здесь я должен был сгруппировать и развернуть valueMap(), так как valueMap() по умолчанию оборачивает поле Value внутри массива, а я нет Мне нужно такое поведение, поскольку у меня есть все свойства с одним значением, поэтому нет смысла получать список, содержащий одно значение.

Теперь все свойства ребра и связанных вершин объединены и доступны с propertyList.

...