es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  

Answer

  1. Avatar for 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.

Comments are closed.