Я хочу начать с заданной вершины и получить все связанные вершины и ребра на расстоянии k. Выходные данные должны включать все ребра, которые соединяют включенные вершины (даже если это ребро находится на расстоянии k + 1), чтобы у нас был полный подграф.
Представьте, что у нас есть это:
g.addV('person').property('name', 'a').as('va')
.addV('person').property('name', 'b').as('vb')
.addV('person').property('name', 'c').as('vc')
.addV('person').property('name', 'd').as('vd')
.addV('person').property('name', 'e').as('ve')
.addV('person').property('name', 'f').as('vf')
.addV('person').property('name', 'g').as('vg')
.select('va').addE('knows').to('vb')
.select('vb').addE('knows').to('vc')
.select('vc').addE('knows').to('vd')
.select('vd').addE('knows').to('ve')
.select('ve').addE('knows').to('va')
.select('ve').addE('knows').to('vf')
.select('vf').addE('knows').to('vg')
a->b->c->d->e->(a)
и e->f->g
Если мы начнем с c с расстояния 2, у нас должно получиться
a->b->c->d->e->(a)
С этим запросом
g.V().has('person','name','c')
.repeat(bothE().dedup()
.store("e")
.bothV()
.dedup()
.store("v"))
.times(2)
.cap('e','v')
Я могу получить a->b->c->d->e
, но мы теряем e->a
край
С этим запросом
g.V().has('person','name','c')
.repeat(bothE().dedup()
.store("e")
.bothV()
.dedup()
.store("v"))
.times(2)
.bothE()
.dedup()
.store('e')
.cap('e','v')
мы получаем дополнительные ребра, которые соединяют внешние вершины, но мы также получаем ребро, которое соединяет внешнюю вершину f. Мы получаем a->b->c->d->e->(a)
, но также e->f
Как мы можем получить только k удаленных вершин и ребер, соединяющих их?