Запрос Гремлин, чтобы пройти весь граф - PullRequest
0 голосов
/ 13 ноября 2018

Можно ли написать запрос Гремлин с заданной вершиной, рекурсивно обойти весь граф, связанный с этим узлом?

Например,

      watched           director
user1 -------> movie_1 <------ chris nolan
                 ^
user2------------|  
      watched

Если задано movie_1, вернуть все вершины, подключенные к movie_1 (user1, user2, chris nolan), затем вернуть вершины, подключенные к user1, user2, chris nolan и т. Д.

1 Ответ

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

Скорее всего, вы использовали бы некоторое изменение repeat() step , чтобы выполнить то, что вы хотите (т.е. пройти произвольное количество шагов от начальной вершины).Задавая вопросы о Gremlin, приятно иметь диаграммы asciiart для графика, но еще лучше иметь простой скрипт Gremlin, который создает сам график следующим образом:

g.addV('movie').property('name','movie-1').as('m').
  addV('user').property('name','user-1').as('u1').
  addV('user').property('name','user-2').as('u2').
  addV('person').property('name','chris nolan').as('d').
  addE('watched').from('u1').to('m').
  addE('watched').from('u2').to('m').
  addE('directed').from('d').to('m').iterate()

Затем, чтобы начать с "movie-1""и перейдите к произвольной глубине, просто выполните:

gremlin> g.V().has('movie','name','movie-1').
......1>   repeat(__.in()).
......2>     emit().
......3>   valueMap(true)
==>[id:2,label:user,name:[user-1]]
==>[id:4,label:user,name:[user-2]]
==>[id:6,label:person,name:[chris nolan]]

Это будет продолжаться по входящим ребрам, пока не достигнет вершин без каких-либо, испуская все вершины, найденные на пути.Очевидно, что если вы не проходите все ребра, вам нужно изменить шаблон в пределах repeat(), чтобы пересечь both(), но вы захотите попытаться избежать циклов в процессе или repeat()будет проходить бесконечно.Здесь можно использовать simplePath(), но в конечном итоге ваш подход к завершению цикла будет определяться структурой вашего графа.

Обратите внимание, что это может быть дорогостоящим запросом в зависимости от глубины обхода.

...