2016-06-13 38 views
1

我想使用Solr作爲我的網站作爲搜索引擎,並且我試圖瞭解基本分頁和深度分頁與光標標記之間的區別。Solr光標標記和分頁

據我瞭解,如果您使用基本分頁和每頁20個結果查詢1001的頁面會出現這種情況:

  • 的Solr將找到的第一個1000 * 20匹配結果
  • 顯示1001頁的下20條結果

我想問題是當有人點擊下一頁時。 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行的第一個查詢,獲取下一個CursorMark,然後與另一個只有20行的查詢使用它?

我發現用20000行運行某個查詢以獲得下一個CursorMark有點奇怪。這是做正確的方法嗎?

那麼,如果您有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之後的十個文檔」,您只需要回答「哪些文檔是該排序鍵後的十個文檔」。

此外cursorMarks處理更新的結果集更好,因爲你避免將推動那些已經被證明回你顯示下一個頁面文件的任何修改的結果集。

the reference guide for complete examples,並進一步說明。

+0

謝謝你的鏈接。我通過它的文檔閱讀了很多,但由於某種原因找不到那篇文章。因此,舉例來說,如果我想創建分頁,我會需要經過所有的結果第一,讓所有的cursorMarks並與頁碼綁定呢?如果我有1000頁,我不會在分頁顯示1000個按鈕,但也許我想要一個鏈接到最後一頁或最後2-3頁。是通過所有結果並將光標綁定到每個頁面按鈕的最佳解決方案嗎? –

+0

不,這個想法是,你用cursorMark的人是通過你的結果集分頁。文件總數可以被檢索一次,以產生分頁信息(「哦,有可用於該查詢5000個文檔)。要直接跳到文檔x個,做分頁可能會更好(或者你可以使用cursorMark的傳統方式具有更多行數,然後將自己分頁到該結果集中)。 – MatsLindh