代码之家  ›  专栏  ›  技术社区  ›  Scharrels

在带有Tijah扩展的XQuery中,无需使用递归函数即可生成元素和分数列表

  •  0
  • Scharrels  · 技术社区  · 15 年前

    对于大学搜索引擎项目,我使用的是MyETDB和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

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

    1 回复  |  直到 12 年前
        1
  •  0
  •   Oliver Hallam    15 年前

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