Repetir problema al atravesar aristas ordenadas en la consulta de árbol.
Tengo un grafo en el que un vértice tiene múltiples aristas del mismo padre. Necesito recorrer solo una de las aristas basándome en el valor de propiedad más alto para crear un árbol.
He utilizado “order().by” para seleccionar la arista. Funciona para una consulta de un solo nivel. Tan pronto como intento repetirlo para un árbol, hay un error que no entiendo:
“El padre de una barrera reductora no puede ser una etapa repeat()-step: GroupStep([EdgeVertexStep(IN)],[FoldStep])”
El grafo:
g.addV("O").property("name",'A').as('A').
addV("O").property("name",'B').as('B').
addV("O").property("name",'C').as('C').
addV("O").property("name",'D').as('D').
addV("O").property("name",'E').as('E').
addV("O").property("name",'F').as('F').
addE("R").property("ver","1").from('A').to('B').
addE("R").property("ver","2").from('A').to('B').
addE("R").property("ver","1").from('A').to('C').
addE("R").property("ver","1").from('B').to('D').
addE("R").property("ver","1").from('B').to('F')
Deseo extraer un árbol como:
A
B (ver=2)
D (ver=1)
F (ver=1)
C (ver=1)
Mi consulta de recorrido con el problema de repetición:
g.V().has('name','A').
repeat(
outE('R').group().by(inV()).
select(values).unfold().
local(unfold().order().by('ver', desc).limit(1).inV())).
times(3).
emit().tree().toList()
Resultado: “El padre de una barrera reductora no puede ser una etapa repeat()-step: GroupStep([EdgeVertexStep(IN)],[FoldStep])”
En Gremlify: https://gremlify.com/r3ubmv3gt8/4
Cualquier ayuda es muy apreciada.
Gracias,
Andrew
davy.ai
Recorriendo el grafo utilizando Gremlin
El Problema
Tenemos un grafo en el cual un vértice tiene múltiples aristas del mismo padre. Necesitamos recorrer solo una de las aristas basándonos en el valor de la propiedad más alta para crear un árbol. Utilizamos “order().by” para seleccionar la arista. Funciona para una consulta de un solo nivel. Tan pronto como intentamos repetirlo para un árbol, aparece un error que no entendemos:
“El padre de una barrera de reducción no puede ser un paso repeat(): GroupStep([EdgeVertexStep(IN)],[FoldStep])”
El Grafo
g.addV("O").property("name",'A').as('A').
addV("O").property("name",'B').as('B').
addV("O").property("name",'C').as('C').
addV("O").property("name",'D').as('D').
addV("O").property("name",'E').as('E').
addV("O").property("name",'F').as('F').
addE("R").property("ver","1").from('A').to('B').
addE("R").property("ver","2").from('A').to('B').
addE("R").property("ver","1").from('A').to('C').
addE("R").property("ver","1").from('B').to('D').
addE("R").property("ver","1").from('B').to('F')
La Solución
Podemos extraer un árbol utilizando la siguiente consulta de recorrido.
g.V().has('name','A').
repeat(
outE('R').group().
by(inV()).
select(values).
unfold().
local(
unfold().
order().
by('ver', desc).
limit(1).
inV()
)
).
times(3).
emit().
tree().
toList()
Resultado: “El padre de una barrera de reducción no puede ser un paso repeat(): GroupStep([EdgeVertexStep(IN)],[FoldStep])”
Conclusión
Solicitamos ayuda para comprender el error y resolver el problema.