我在 MarkLogic 服务器中有大约 53,00,000 个文档,我正在构建一个简单的搜索应用程序。用户输入一个搜索词,MarkLogic 服务器在所有文档的所有节点中搜索该词并返回匹配的文档作为结果。我已经实现了一个自定义分页来显示每页的结果。我每页显示 10 个结果。
我为此使用搜索api:-
import module namespace search="http://marklogic.com/appservices/search" at "/Marklogic/appservices/search/search.xqy";
declare variable $options:=
<options xmlns="http://marklogic.com/appservices/search">
<transform-results apply="raw"/>
</options>;
search:search($p, $options, $noRecFrom, 10)/search:result
其中 $p 是来自用户的输入 $noRecFrom 是指示我们必须从哪里显示记录的数字。例如,第 1 页 $noRecFrom 将为 1,第 2 页 $noRecFrom 将为 11,第 3 页 $noRecFrom 将为 21,依此类推。对于分页,有超链接可以转到第一页、下一页、上一页和最后一页。
要计算返回的记录总数,我正在使用:-
for $x in search:search($p, $options)
return $x//@total;
虽然 First、Next 和 Prev 超链接完美运行,但如果有人单击 Last,应用程序将停止响应并且查询不会显示任何输出。是由于数据库中的大量文档还是我错误地实现了它。
MarkLogic 中是否有任何有效的分页方法(用于搜索:搜索),以便用户可以在如此大的数据库的查询结果中不延迟地转到最后一页?