Я хочу начать с заданной вершины и получить все связанные вершины и ребра на расстоянии ak.Выходные данные должны включать все ребра, которые соединяют включенные вершины (даже если это ребро находится на расстоянии 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
edge
С этим запросом
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 вершин расстояния и соединяющих их ребер?