Как узнать количество встреченных вершин при переходе от одной вершины к другой в гремлине - PullRequest
0 голосов
/ 06 ноября 2018

enter image description here

На изображении выше мы видим, что я могу пройти к узлу 5 с обоих узлов 1 и 2 , но при переходе с 1 только одна встреченная вершина, которая является 3 , но для двух это 5 и 4 .

Как я могу написать запрос gremlin, который будет возвращать количество встреченных вершин.

1 Ответ

0 голосов
/ 06 ноября 2018

Когда вы задаете вопросы о Gremlin, картинка может быть полезной, но гораздо важнее предоставить сценарий Gremlin, который создает некоторые примеры данных, например:

g.addV().property(id,1).as('1').
  addV().property(id,2).as('2').
  addV().property(id,3).as('3').
  addV().property(id,4).as('4').
  addV().property(id,5).as('5').
  addE('link').from('1').to('3').
  addE('link').from('2').to('3').
  addE('link').from('2').to('4').
  addE('link').from('3').to('5').
  addE('link').from('4').to('5').iterate()

В ответ на ваш вопрос, я думаю, вам просто нужно использовать шаг path(), чтобы показать, куда Гремлин прошел:

gremlin> g.V().repeat(out()).emit().path()
==>[v[1],v[3]]
==>[v[1],v[3],v[5]]
==>[v[2],v[3]]
==>[v[2],v[4]]
==>[v[2],v[3],v[5]]
==>[v[2],v[4],v[5]]
==>[v[3],v[5]]
==>[v[4],v[5]]

Если вас интересуют пути между вершинами 1/2 и 5, вы можете добавить некоторые ограничения:

gremlin> g.V(1,2).repeat(out()).emit(hasId(5)).path()
==>[v[1],v[3],v[5]]
==>[v[2],v[3],v[5]]
==>[v[2],v[4],v[5]]

Опираясь на это далее, если вы хотите посчитать вершины в середине пути, то вы можете unfold() пути, отфильтровать ваши начальные / конечные вершины и count():

gremlin> g.V(2).
......1>   repeat(out()).
......2>     emit(hasId(5)).
......3>   path().
......4>   unfold().
......5>   not(hasId(2,5)).
......6>   dedup().
......7>   count()
==>2

Надеюсь, это вдохновит вас. В Gremlin Recipes .

есть много хороших примеров.
...