例如,我們有文本過濾器如CouchDB的分頁與複雜的查詢
文檔= db.view( 「_設計/濾波器/ _view/SUBSTR」,startkey =串,endkey =子+ U 「\ ufff0」 ,include_docs = True,限制= 20,跳過= 0)
什麼是正確的方式來做分頁沒有慢跳過?
例如,我們有文本過濾器如CouchDB的分頁與複雜的查詢
文檔= db.view( 「_設計/濾波器/ _view/SUBSTR」,startkey =串,endkey =子+ U 「\ ufff0」 ,include_docs = True,限制= 20,跳過= 0)
什麼是正確的方式來做分頁沒有慢跳過?
首先,我希望你明白,這不是全文搜索。你也不能在不使用跳過參數的情況下在CouchDB中實現分頁,因爲你不能說第20個元素放置在哪裏(說)。因此,模擬分頁的唯一方法是製作「下一個N結果」鏈接/按鈕。
CouchDB很放鬆。您現在可以使用skip
。它會工作得很好,你可以專注於其他重要的事情。主要問題是它不是最終可擴展的。對於小數據集(高達1,000行左右),我不擔心。
但是從長遠來看,這個不會工作得很好。除了將skip
設置爲0
,20
,40
,60
等,您可以改爲使用startkey
。
startkey=substring
,limit=20
。key
告訴你它在視圖中使用了哪個鍵。startkey=
key
來自步驟2的值,加上limit=20
和skip=1
。看看發生了什麼?第二個查詢從第一個查詢結束的位置開始。爲了避免兩次顯示同一行,只需跳過它。 (您也可以取回它,但忽略它在客戶端—您的選擇。)
這大多數時間工作。我也建議你看看CouchDB view API中描述的startkey_docid
。
什麼時候不起作用?如果你在視圖中發出多個相同的密鑰? – 2011-04-07 07:16:46
我的意思是:「當你爲給定的docid發出多個相同的密鑰?」 – 2011-04-07 07:24:25
這組數據是不規則的,所以1個字(或字的子字符串)可以與未定義數量的文檔鏈接。而且這個數字可以大於頁面的大小(即,「書」可以與100個文檔鏈接,但是頁面大小爲20),並且從關鍵「書」開始,我不能顯示其餘80個文檔並且鏈接列表將變成無限循環 – AlikZao 2011-04-10 15:06:01
舉一個例子,可以用lucene實現分頁嗎? – AlikZao 2011-04-05 00:01:14
@AlikZao:[來自Robert Newson的這個提示](http://couchdb.markmail.org/thread/bdjvscg3trshjn4j)有些幫助嗎? – 2011-04-05 07:10:13
這不是全文搜索,但我建議人們以這種方式開始。前綴(自動完成)搜索非常有價值,您將很好地瞭解CouchDB視圖。 CouchDB-Lucene添加了更多需要維護的軟件,以及更多需要學習的API。 – JasonSmith 2011-04-06 08:41:48