0

对于大学搜索引擎项目,我使用 MonetDB 和 Tijah 扩展。我有一个节点列表,从搜索字符串返回:

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

$nodes现在包含一个元素列表,例如:

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

我可以使用以下 FLWOR 表达式计算并返回此列表的分数:

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

但是,我想在新的搜索查询中使用节点列表。为此,我必须从该列表中生成一个具有以下格式的字符串:

Design Patterns {0.2937} Antipatterns {0.43984}

在这种格式化中,分数(返回tijah:score并组合名称。我想用递归函数生成这个字符串,但是我需要使用的 MonetDB 代数引擎不支持递归函数。

我可以使用非递归(可能是 FLWOR)表达式生成相同的结果吗?

4

1 回答 1

0

这是做你想做的吗?

string-join(
  for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return string-join((data($book/title), ' {', $score, '}'), ''),
  ' ')
于 2009-12-23T19:49:50.463 回答