对于大学搜索引擎项目,我使用带有Tijah扩展的MonetDB。我有一个从搜索字符串返回的节点列表:
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代数引擎不支持递归函数。 / p>
我可以使用非递归(可能是FLWOR)表达式生成相同的结果吗?
答案 0 :(得分:0)
这样做你想要的吗?
string-join(
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return string-join((data($book/title), ' {', $score, '}'), ''),
' ')