Concat una lista de elementos y las puntuaciones sin necesidad de utilizar una función recursiva en XQuery con extensiones tijah

StackOverflow https://stackoverflow.com/questions/1951894

  •  21-09-2019
  •  | 
  •  

Pregunta

Para un proyecto de motor de búsqueda de la universidad, estoy usando MonetDB con extensiones tijah. Tengo una lista de nodos, de volver de una cadena de búsqueda:

let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)

$nodes ahora contiene una lista de elementos, por ejemplo .:

<book>Design Patterns</book>
<book>AntiPatterns</book>

Puedo calcular y devolver los resultados de esta lista con la siguiente expresión FLWOR:

for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return <book score="{$score}">{$book/title}</book>

Sin embargo, quiero usar la lista de nodos en una nueva consulta de búsqueda. Para hacer esto, tengo que generar una cadena de esta lista con el siguiente formato:

Design Patterns {0.2937} Antipatterns {0.43984}

En este formato a las puntuaciones (devueltos por tijah:score y los nombres se combinan. Yo quería generar esta cadena con una función recursiva, pero el motor MonetDB Álgebra necesito utilizar no soporta las funciones recursivas.

¿Puedo generar el mismo resultado con una expresión no recursiva (posiblemente FLWOR)?

¿Fue útil?

Solución

¿Esto hace lo que quiere?

string-join(
  for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return string-join((data($book/title), ' {', $score, '}'), ''),
  ' ')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top