MarkLogic サーバーには約 5,300,000 のドキュメントがあり、単純な検索アプリケーションを構築しています。ユーザーが検索語を入力すると、MarkLogic サーバーはすべてのドキュメントのすべてのノードでその語を検索し、一致するドキュメントを結果として返します。ページごとに結果を表示するカスタム ページングを実装しました。1 ページあたり 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;
最初、次、前のハイパーリンクは完全に機能しますが、誰かが最後をクリックすると、アプリケーションは応答を停止し、クエリは出力を表示しません。データベース内のドキュメントの数が多いためですか、それとも実装が間違っていますか。
ユーザーがこのような大規模なデータベースのクエリ結果で遅延なく最後のページに移動できるように、MarkLogic (search:search 用) で効率的なページネーションの方法はありますか?