开发者

Concat a list of elements and scores without using a recursive function in XQuery with Tijah extensions

For a university search engine project, I am using MonetDB with Tijah extensions. I've got a list of nodes, returned from a search string:

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

$nodes now contains a list of elements, e.g.:

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

I can calculate and return the scores for this list with the following FLWOR expression:

for $book in $nodes
  let $score := tijah:score($qi开发者_JAVA百科d, $book)
  order by $score descending
  return <book score="{$score}">{$book/title}</book>

However, I want to use the list of nodes in a new search query. To do this, I have to generate a string from this list with the following formatting:

Design Patterns {0.2937} Antipatterns {0.43984}

In this formatting the scores (returned by tijah:score and the names are combined. I wanted to generate this string with a recursive function, but the MonetDB Algebra engine I need to use doesn't support recursive functions.

Can I generate the same result with a non-recursive (possibly FLWOR) expression?


Does this do what you want?

string-join(
  for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return string-join((data($book/title), ' {', $score, '}'), ''),
  ' ')
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜