Как найти Edge ID между двумя вершинами в Gremlin - PullRequest
0 голосов
/ 30 мая 2018

Предположим, у нас есть граф g со многими вершинами, и нам нужно найти ребро и ID ребра между вершинами v1 и вершинами v2 , имеющими ID id1 и id2 .

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Если вы используете gremlin-python с orientDB, фрагмент кода ниже вам поможет.

g.V(from_v_id).outE(label).where(__.inV().where(__.hasId("#" + to_v_id))).next()
0 голосов
/ 30 мая 2018

Обход для этого просто:

g.V(id1).bothE().where(otherV().hasId(id2))

Я использовал bothE(), так как вы не сказали, будет ли переход от v1 до v2 или наоборот.Когда вы уже знаете направление, вам следует использовать outE() или inE().В дополнение к этому, когда вы знаете метку ребра, вы должны указать ее на этом шаге, чтобы уменьшить количество проходимых ребер.

Для современного графика TinkerPop это выглядит так:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().valueMap(true)
==>[name:[marko],label:person,id:1,age:[29]]
==>[name:[vadas],label:person,id:2,age:[27]]
==>[name:[lop],label:software,id:3,lang:[java]]
==>[name:[josh],label:person,id:4,age:[32]]
==>[name:[ripple],label:software,id:5,lang:[java]]
==>[name:[peter],label:person,id:6,age:[35]]
gremlin> g.V(1).bothE().where(otherV().hasId(2)).id()
==>7

и оптимизирован с явным указанием направления и края:

gremlin> g.V(1).outE('knows').where(inV().hasId(2)).id()
==>7
...