2013-07-24 5 views
1

Я пытаюсь получить первое перечисление ширины, работающее с Gremlin, однако у меня возникли проблемы с поиском способа вывода всех шагов, наблюдаемых во время перечисления. Я могу распечатать результат последней итерации.Breadth Первое перечисление в Gremlin

Мой вопрос будет, учитывая начальный узел, как это, как я могу следовать за всеми путями (не зная общей глубины) с помощью Gremlin и распечатывать все, что я нахожу на этом пути?

study=g.v('myId') 

Я попытался рассеивает подход, зацикливание подхода (хотя и кажется, требуют знаний о фактической длине пути заранее, если я правильно понимаю)

Большого спасибо!

ответ

4

Вы не дают какого-либо существенного кода, который показывает, как вы используете цикл, но я думаю, что с правильными аргументами вы можете получить его, чтобы сделать то, что вы хотите:

gremlin> g = TinkerGraphFactory.createTinkerGraph() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g.v(1).as('x').out.gather.scatter.loop('x'){true}{true} 
==>v[2] 
==>v[4] 
==>v[3] 
==>v[5] 
==>v[3] 

Я предполагаю, что вы понять код через сбор/разброс и первую часть цикла, которая указывает на x. Итак, с учетом этого предположения, я сосредоточусь на двух замыканиях, переданных в цикл.

Первое замыкание, переданное в цикл, указывает Гремлину, когда выйдет из цикла. Просто вернув истину, вы говорите, чтобы выпустить цикл. В зависимости от структуры вашего графика это может быть нежелательным, так как вы можете долго ждать, пока результат вернется. Как минимум, вы должны подумать о том, чтобы установить его на нечто невероятно высокое, чтобы, если вы нажмете какой-то цикл на графике, ваш обход разрывается.

Второе закрытие известно как «испускающее замыкание». Вы можете узнать больше об этом here, но в основном он определяет, должны ли возвращаться промежуточные объекты в трубе (а не только те, которые находятся в конце цикла). В этом случае вы можете увидеть, что я просто установил это значение в true, чтобы он выдавал все объекты на всех этапах цикла.

+0

Спасибо, Стивен, это сработало! – Eamonn

+0

Я думаю, что использование сбора/разброса в этом цикле избыточно, потому что конвейер внутри цикла оценивается по ширине: https://groups.google.com/forum/#!msg/gremlin-users/X8sOoijCPhY/67- hlKiKy5EJ –

+0

Что делать, если я хочу включить в результат начальную вершину v (1)? –