簡體   English   中英

在AWS Cloudsearch上獲取上一個光標

[英]Get previous cursor on AWS Cloudsearch

我正在搜索我們的網站,成千上萬的用戶訪問了該網站。 我喜歡CloudSearch,因為它超級快並且可以減輕RDS的負擔。 我們大約有3萬個文檔,因此為了使結果分頁,我需要使用游標。 文檔不斷更新(添加,修改或刪除)。 我現在遇到的這個問題是獲取上一個光標。

我理想的情況是

{上一頁} {...} {3} {4} {5} {6} {7} {...} {下一頁}

但是我注意到這很難做到,因為每次查詢完成時我都無法獲取所有游標。 所以我正在考慮做

{上一頁} {下一頁}

我這樣做的方法是將當前光標和下一個光標傳遞給AJAX腳本以加載新結果。 當用戶向前移動並獲得下一頁時,此功能非常理想。 當用戶返回並檢索上一頁時,它會中斷。 他們可以返回一頁,直到當前(上一個)光標,但是不能返回超過一頁。 對於用戶而言,這是荒謬的。

我曾嘗試存儲游標,但是如果有新文檔進入或刪除了舊文檔,它將再次中斷。 我的光標將返回0個結果。 如果要獲取新的游標,則只會看到下一個而不是前一個。

例:

第2頁有光標??? 第3頁有光標??? 第4頁(當前頁)具有光標VWXabc123第5頁(下一頁)具有光標VUTdef456

因此,問題是,如何在第4頁之前獲取以前的游標? 我無法存儲結果或無法從查詢中獲取結果,這意味着我什至無法執行簡單的“上一個”和“下一個”按鈕。

非常感謝大家!

您可以使用“開始”和“大小”參數代替“光標”:這使您可以隨機訪問讀取結果。 但是CloudSearch在整個集合中將您限制為10,000個結果。

為了讓客戶端對光標進行無限次“返回”,您需要對其進行跟蹤。 如果只有一台應用服務器與他們對話並跟蹤客戶端會話,則可以將它們存儲在您的應用服務器上,從而將prev / next和/或page =#與它們關聯。

我們的應用程序有多個EC2服務器,因此我們無法在其中跟蹤。 但是,我們可以讓客戶端存儲它們在每個游標提供的頁面之間移動時所使用的游標“堆棧”。 當他們返回時,將舊光標從堆棧中彈出,然后轉到那里。 當他們前進時,將新光標添加到堆棧中。 我們將在客戶的Angular代碼中執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM