Как выбрать случайные вершины в Gremlin

Я все еще на ранних этапах работы с графиками и гремлинами.

Можно ли случайным образом выбирать вершины графа в Gremlin?

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

u.out('Friend')[0..9].out('Drives').map()

Но этот код каждый раз выполняется только против первых 10 друзей. Как я могу сделать выбор случайным эффективно?

Спасибо за уделенное время :)


person riflehawk    schedule 25.02.2015    source источник
comment
Кажется, мы могли бы создать конвейер общего назначения, который принимает желаемое количество элементов в качестве аргумента, выполняет итерацию по всем входным данным, а затем возвращает это количество случайно выбранных элементов.   -  person Paul Jackson    schedule 25.02.2015


Ответы (2)


Вы можете использовать shuffle:

 g = TinkerGraphFactory.createTinkerGraph()
 gremlin> g.v(1).out.shuffle[0]
 ==>v[3]
 gremlin> g.v(1).out.shuffle[0]
 ==>v[2]
 gremlin> g.v(1).out.shuffle[0]
 ==>v[3]
 gremlin> g.v(1).out.shuffle[0]
 ==>v[4]

Однако это решение не очень эффективно, поскольку необходимо получить всех соседей v(1).

Это также может помочь: Случайное блуждание по двудольному графу с Гремлином

person Faber    schedule 25.02.2015

В Gremlin 2.x можно было использовать случайный шаг, как показано ниже:

g.v(1).out.random()

или в 3.x random стало coin:

as in:

g.V(1).out.coin()

в версии 3.x вы также можете посмотреть пример и упорядочить (перетасовать) шаги в 3.x.

person stephen mallette    schedule 25.02.2015