You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TEI Publisher通用搜索结果排序异常,求按字母及div排序方案

TEI Publisher通用搜索结果排序问题解决思路

问题背景

基于XML/TEI的历史文本数字化项目部署在TEI Publisher平台,当前存在以下问题:

  • 分面搜索结果按文章字母顺序正常展示,但通用搜索结果呈随机排序
  • 需求:通用搜索结果需按文章字母顺序排列,且同一文本下的结果按<div>元素的顺序排序
  • 已尝试修改search.xql中的排序语句,但无效果,怀疑需调整query.xql、navigation.xql或query-tei.xql等核心搜索文件

关键排查与修改步骤

1. 定位核心搜索逻辑文件

TEI Publisher的通用搜索结果集通常由query.xql或query-tei.xql生成,search.xql多负责前端渲染,优先检查这两个文件:

  • 找到包含cts:search或xdmp:search的查询语句块,确认是否未指定排序规则(无排序时引擎会随机返回结果)

2. 添加两级排序规则

在搜索结果生成的XQuery代码中,插入按文档标题/标识符和div元素位置的排序逻辑:

let $query := ... (: 原有查询逻辑保留 :)
let $raw-results := cts:search(collection(), $query)
let $sorted-results :=
  for $hit in $raw-results
  let $root-doc := $hit/ancestor-or-self::TEI
  <!-- 第一排序键:文章标题,根据你的TEI结构调整路径 -->
  let $doc-title := $root-doc/teiHeader/fileDesc/titleStmt/title/text()
  <!-- 第二排序键:div的顺序,若用@n标记则转整数,否则用节点位置计数 -->
  let $div-position := 
    if ($hit/ancestor-or-self::div/@n) then
      $hit/ancestor-or-self::div/@n => xs:integer()
    else
      count($hit/ancestor-or-self::div/preceding-sibling::div) + 1
  order by $doc-title ascending, $div-position ascending
  return $hit
return $sorted-results

3. 检查分页逻辑的排序传递

如果搜索结果涉及分页,需确认navigation.xql中是否保留了排序参数:

  • 避免分页请求时重置排序规则,确保分页后的结果仍遵循设定的排序逻辑

4. 验证渲染层的结果使用

回到search.xql,确认渲染时调用的是排序后的$sorted-results变量,而非原始未排序的结果集,避免变量传递错误导致排序失效


TEI结构适配示例

假设你的TEI文档结构如下:

<TEI xmlns="http://www.tei-c.org/ns/1.0">
  <teiHeader>
    <fileDesc>
      <titleStmt>
        <title>19th Century Essay Collection</title>
      </titleStmt>
    </fileDesc>
  </teiHeader>
  <text>
    <div n="1">Introduction</div>
    <div n="2">Main Body</div>
    <div n="3">Conclusion</div>
  </text>
</TEI>

则排序逻辑中的$doc-title和$div-position可直接匹配上述结构,若你的div未用@n标记,改用节点位置计数即可。


测试验证

修改完成后重启TEI Publisher服务,执行通用搜索:

  • 验证不同文章的结果按标题字母顺序排列
  • 验证同一文章内的结果按div的先后顺序展示

内容的提问来源于stack exchange,提问作者ndso86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:16:04