Рекурсивное получение узлов с помощью запроса Gremlin

Я хотел бы определить запрос Gremlin, который рекурсивно возвращает все узлы до тех пор, пока не останется доступных узлов:

Node: ProductionEvent
Node: Product

До сих пор я пробовал следующее... однако я не уверен, что вывод правильный. Кроме того, можно ли распечатать его с помощью функции tree()? И могу ли я выполнить функцию повтора с функцией времени, чтобы получить все узлы?

g.V().hasLabel('ProductionEvent').
                repeat(__.outE('consumes').simplePath()).times(3). 
                emit().dedup()  

Я ожидаю такого вывода

Product1: consumed <--- ProductionEvent1 --> produced :Product2: consumed <--- ProductionEvent2 --> produced :Product3

person AminHero    schedule 17.05.2019    source источник
comment
Функция times() ограничивает количество повторений, в данном случае до 3. Пробовали ли вы запустить ее без .times(3)   -  person Tim Sexton    schedule 17.05.2019
comment
Также похоже, что вы ожидаете результатов от двух разных ребер на основе обхода, consumed и produced, но ваш запрос рассматривает только consumes. Можете ли вы опубликовать, как на самом деле выглядит ваш вывод с запросом, который вы используете, по сравнению с примером того, что вы ожидаете?   -  person Tim Sexton    schedule 17.05.2019
comment
@TimSexton Я получаю много строк с узлами: ==›v[9564QTBGLDVF9] ==›v[0481802604-322892015] ==›v[0481802604-322892067] ==›v[0481802604-322893909] ... я ожидание чего-то вроде: orderID -> произведенный продукт -> потребленный продукт orderID -> произведенный продукт -> потребленный продукт   -  person AminHero    schedule 19.05.2019


Ответы (1)


Я добился результатов, которыми доволен. Запрос

 g.V().hasLabel('ProductionEvent').has('orderID', 'XYZ')
      .repeat(__.out('consumes').in_('produces').simplePath()).emit().times(5)
      .dedup().limit(6).next()

Насколько я понимаю, limit() и times() необходимы для того, чтобы улучшить время выполнения запроса, если количество результатов известно заранее. И simplepath() гарантирует, что уже посещенные пути не будут повторно посещаться.

person AminHero    schedule 21.05.2019