Объединение коллекций с запросом Gremlin

Привет, я новичок в Tinkerpop и Gremlin, и я борюсь с обходом, который пытаюсь выполнить.

В основном у меня есть набор идентификаторов вершин, по которым я хочу пройти, и найти набор вершин из определенных ребер. Я хочу связать вершины, следующие за внешними ребрами, с их достоверностью. Например: v1 -> e1 -> v2 v1 -> e2 -> v4 v3 -> e3 -> v5 v3 -> e4 -> v6 Итак, v1 имеет 2 выходных ребра (e1 и e2) до v2 и v4, а v3 имеет 2 выходных ребра (e3 и e4) до v5 и v6. Я хочу получить результат обхода, который выглядел бы примерно так [[[v1],[v2,v4]],[v3,[v5,v5]]]

Может ли кто-нибудь помочь мне с обходом с помощью Gremlin, который поможет мне получить этот результат? Самое близкое, что я пришел, - это что-то вроде этого graph.traversal().V(4264,40964144).as('people').map{it.get().vertices(OUT, 'codes_in')}.as('languages').union(select('people'), select('languages'))


person Ryan Baxter    schedule 11.04.2016    source источник


Ответы (1)


Вот один из способов сделать это, продемонстрированный с помощью "modern" игрушечный график:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1,4).group().by().by(out().fold())
==>[v[1]:[v[3], v[2], v[4]], v[4]:[v[5], v[3]]]

Он просто использует group (). Первый модулятор by() представляет ключ каждой группы (в данном случае начальную вершину), а затем второй модулятор by() - это то, что вы хотите в своей группе (в данном случае вершина out()). Обратите внимание, что вы должны включить fold() во второй by(), чтобы принудительно выполнить итерацию этого внутреннего обхода.

Кстати, делать graph.traversal() - не лучший шаблон. Создайте TraversalSource один раз и используйте его повторно.

person stephen mallette    schedule 11.04.2016
comment
Спасибо, Стивен, это помогло. Намного проще, чем я ожидал! - person Ryan Baxter; 12.04.2016
comment
На самом деле, Стивен, у меня есть один дополнительный вопрос. Я бы хотел, чтобы свойства v1 и v3 также были включены в результат. Я не вижу, чтобы это произошло с заданным вами запросом. - person Ryan Baxter; 12.04.2016
comment
Кажется, я понял, что запрос работает graph.traversal().V(4264,40964144).group().by().by(union(fold(), out()).fold()) - person Ryan Baxter; 13.04.2016