Search 使用搜索API时在Marklogic中分页

Search 使用搜索API时在Marklogic中分页,search,pagination,marklogic,Search,Pagination,Marklogic,我在MarkLogic server中有大约53000000个文档,我正在构建一个简单的搜索应用程序。用户输入搜索词,MarkLogic server在所有文档的所有节点中搜索该词,并返回匹配的文档作为结果。我已经实现了一个自定义分页来显示每页的结果。我显示每页10个结果 我正在为此使用搜索api,因为:- import module namespace search="http://marklogic.com/appservices/search" at "/Marklogic/appserv

我在MarkLogic server中有大约53000000个文档,我正在构建一个简单的搜索应用程序。用户输入搜索词,MarkLogic server在所有文档的所有节点中搜索该词,并返回匹配的文档作为结果。我已经实现了一个自定义分页来显示每页的结果。我显示每页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
虽然First、Next和Prev超级链接工作得很好,但如果有人单击Last,应用程序将停止响应,并且查询不会显示任何输出。是因为数据库中有大量的文档,还是我错误地实现了它


在MarkLogic(搜索:搜索)中有没有有效的分页方法,以便用户可以毫不延迟地查询如此大的数据库的最后一页?

有关于分页搜索的教程,您正在for循环中重复运行搜索。这确实是缓慢的

相反,您应该根据@total和每页文档数计算$start参数,并将其作为参数传递给search:search(我认为这是第三个参数)

我还建议您确保可以在未过滤模式下运行。在开发人员站点上有关于优化快速分页(索引等)的良好信息;其思想是解决索引外的查询,以提供非常好、准确的未过滤性能


如果按照您实现它的方式执行,那么您将在for循环中重复运行搜索。这确实是缓慢的

相反,您应该根据@total和每页文档数计算$start参数,并将其作为参数传递给search:search(我认为这是第三个参数)

我还建议您确保可以在未过滤模式下运行。在开发人员站点上有关于优化快速分页(索引等)的良好信息;其思想是解决索引外的查询,以提供非常好、准确的未过滤性能


如果您这样做

一旦您解决了上述cwhit提到的问题,如果您仍然希望以更快的方式访问数据的最后一页,那么您可以使您的代码足够智能,以反转排序顺序并提取正确的记录偏移量

这里还有一个提示: 要更好地了解MarkLogic在搜索中的作用:搜索,请调用

搜索:get-default-options()


查看常用搜索应用程序的起点。

一旦您解决了上述cwhit提到的问题,如果您仍然希望以更快的方式访问数据的最后一页,您可以使代码足够智能,以反转排序顺序并提取正确的记录偏移量

这里还有一个提示: 要更好地了解MarkLogic在搜索中的作用:搜索,请调用

搜索:get-default-options()


查看常用搜索应用程序的起点。

请注意,2006教程没有使用高级
search:search
API。它使用较低级别的
cts:search
API。大多数新应用程序都可以使用更高级别的API。更新了教程链接:请注意,2006教程没有使用高级
search:search
API。它使用较低级别的
cts:search
API。大多数新应用程序都可以使用更高级别的API。教程的更新链接:不确定它是否在重复搜索,但我同意使用for循环来获取总数似乎没有意义。不确定它是否在重复搜索,但我同意使用for循环来计算总数似乎没有意义。我怀疑你的计算中存在缺陷,从第一个、下一个、上一个到最后一个。但你必须与我们分享它们以确保安全。你可能会意外地要求大量搜索结果返回最后一页,这可以解释为什么它响应缓慢。我怀疑你的计算中存在缺陷,只返回到第一页、下一页、上一页和最后一页。但你必须与我们分享它们以确保安全。您可能会意外地请求大量搜索结果以返回最后一页,这可以解释为什么它响应缓慢。
for $x in search:search($p, $options)

return $x//@total;