【发布时间】:2012-04-11 10:15:27
【问题描述】:
我在 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 中是否有任何有效的分页方式(用于搜索:搜索),以便用户可以在如此大的数据库的查询结果中不延迟地转到最后一页?
【问题讨论】:
-
我怀疑您的计算存在缺陷,仅限于 First、Next、Prev 和 Last。但是您必须与我们分享以确保。您可能会意外地请求大量搜索结果以返回最后一页,这可以解释为什么它响应缓慢。
标签: search pagination marklogic