Запрос Гремлина для поиска вершин, соединенных в обоих направлениях

Гремлин: подсчет соединений, игнорируя ребра с параллельным ребром в противоположном направлении. В этом вопросе я хотел бы знать, есть ли способ найти вершины, соединенные в обе стороны от данной вершины. Мы знаем, что функция dedup () позволяет избежать дублирования. Но есть ли способ найти вершины с параллельными ребрами?


person pridhvi    schedule 29.04.2020    source источник


Ответы (1)


Поиск вершин с параллельными ребрами - это частный случай обнаружения цикла.

Вы можете найти рецепт определения цикла здесь.

Упрощенная версия кода для вашего случая:

g.V().as('a').
  out().simplePath().where(out().as('a')).
  path().dedup().by(unfold().
    order().by(id).
    dedup().fold())

пример: https://gremlify.com/8c

person noam621    schedule 29.04.2020
comment
Я знаю вершину, из которой мне нужно знать другие вершины с параллельными ребрами. Я попробовал запрос ниже, это нормально, но когда соединения увеличиваются, задержка будет увеличиваться. {. gV (x.id ()). out ('label') .where (__. out ('label'). hasId (x.id ()))} Можете ли вы изменить запрос и немного объяснить развернутую часть, если Я знаю вершину. - person pridhvi; 29.04.2020
comment
Если вы знаете начальную вершину, вы можете просто выполнить g.V(x.id()).as('a').out('label').where(out('label').as('a')). Обратите внимание, что этот запрос также вернет первую вершину, если она соединена сама с собой. - person noam621; 29.04.2020
comment
Да, я на это способен. Я также пробовал gV (x.id ()). Out ('label'). Where (out ('label'). HasId (x.id ()), и он работает, но есть ли лучший способ сделать это, если вы можно увидеть, увеличиваются ли исходящие ребра вершины, время, затрачиваемое на этот запрос, будет продолжать увеличиваться. - person pridhvi; 29.04.2020