2016-06-13 21 views
1

Solrを検索エンジンとして使用したいと思っています。カーソルマーカーで基本ページングと深いページングの違いを理解しようとしています。Solrカーソルマーカーとページ番号

私の知る限り理解し、あなたが基本的なページネーションを使用して、ページごとに20回の結果とページ1001を照会する場合は、この現象が発生します:

  • Solrには、最初の1000 * 20のマッチング結果
  • に表示があります次の20件の1001ページの結果

誰かが次のページをクリックしたときに問題が発生すると思います。 Solrは最初に1001 * 20の結果を見つけ、その後に望ましい結果を表示します。

大量の深刻なページングの適切な例は見ていません。小さい数字でしかないので、私はこれについては分かりません。誰かがそれを明確にすることはできますか?

次の例は正しいですか?

.../query?q=id:book*&sort=pubyear_i+desc,id+asc&fl=title_t,pubyear_i&rows=1&cursorMark=* 

私に「nextCursorMark」を与えてこの:「AoJcfCVib29rMg ==」

今私はnextCursorMarkを持っていることを私は行くと私の目的のページを見つけることができます。 ここで手動でページを表示する必要がありますか?私が欲しい特定のページを検索するループを作成する必要がありますか?

または、20000行の最初のクエリを取得し、nextCursorMarkを取得して、それを20行しかない別のクエリで使用する必要がありますか?

nextCursorMarkを取得するために20000行のクエリを実行するのはちょっと奇妙です。それを行う正しい方法ですか?

たとえば、10ページあり、1ページから5ページ目をクリックしたい場合はどうすればいいですか?手動で各ページに移動する必要がありますか?

編集:私はこれを読んでいる

How to manage "paging" with Solr?

そして、この:https://lucidworks.com/blog/2013/12/12/coming-soon-to-solr-efficient-cursor-based-iteration-of-large-result-sets/

作業例を見つけることを試みたが、できませんでした。

答えて

1

cursorMarkは、次の応答を開始する場所をSolrに指示します。これは、最初の例のstartパラメータに似ています。結果をページづけすると、各応答のcursorMarkが次のページの開始位置を示します。

「1001ページの最初の結果は何か」を探しているだけであれば、最初のバージョンで正常に動作します。ユーザーが次のページに移動したかどうかにかかわらず、結果を改ページしている場合、cursorMarkを使用するポイントは、最後に表示されたドキュメントが各ノード(または単一ノードのセットアップ内)したがって、各ノードの現在の位置から文書の数だけrowsを戻すことができます。最初のバージョンを実行する場合、各ノードはstart + rowsのドキュメントを返す必要があります。したがって、どの文書が20001年以降の10個の文書であるかを調べようとするのではなく、「このソートキーの次の10個の文書」と答えるだけです。

さらに、表示されている次のページに既に表示されているドキュメントをプッシュする結果セットを変更しないように、結果セットの更新をより適切に処理します。

the reference guide for complete examplesとそれ以上の説明を参照してください。

+0

リンクありがとうございます。私はそのドキュメントを通して多くを読んだことがありますが、なんらかの理由でその記事を見つけることができませんでした。たとえば、ページネーションを作成する場合は、すべての結果を最初に調べ、すべてのcursorMarkを取得してページ番号にバインドする必要がありますか?私が1000ページを持っているならば、私はページネーションに1000個のボタンを表示しませんが、最後のページか最後の2-3ページへのリンクがほしいと思うかもしれません。すべての結果を確認し、各ページボタンにカーソルをバインドする最良のソリューションですか? –

+0

いいえ、考え方は、人が結果セットをページングしているときにcursorMarkを使用することです。ドキュメントの総数を1回取得してページング情報を生成することができます(このクエリでは5000個のドキュメントが利用可能です)。x個のドキュメントをスキップするには、伝統的なページ付け方法が有効です(cursorMark行数が多い場合は、その結果セットに改ページしてください)。 – MatsLindh