2014-07-22 28 views
0

我有這樣的問題與couchbase設計:查詢返回40000記錄。我需要添加額外的過濾器,並獲得「前100名」。Couchbase附加過濾器

我在應用程序代碼中做了這樣的過濾/排序,這意味着我必須從Couchbase中獲取40000條記錄(這很耗時)。有沒有辦法在couchbase節點上執行過濾器/排序(無需將整個4000條記錄提取到應用服務器)?

我的數據是旅行團的旅遊即

{ 
    "OT": "tour", 
    "dd": 20140720, 
    "city": 1206, 
    "hotel": 9656, 
    "stars": 2, 
    "resort": 23415, 
    "country": 34, 
    "price": 24139, 
    "priceType": 1, 
    "tickets": "QQYY", 
    "nights": 5, 
    "food": 4, 
    "oper": 18, 
    "adult": 1, 
    "ch": 0, 
    "ch1": 0, 
    "ch2": 0, 
    "ch3": 0, 
    "avail": 1, 
    "stop": "Q" 
} 

,我需要在4或5星級標準的酒店選擇從倫敦到土耳其20140622和20140710之間十大最廉價的旅行...

我的觀點看起來像:

function (doc, meta) { 
    if(meta.type==='json' && doc.OT==='tour'){ 
    emit(["A",doc.country,doc.city,doc.adult,doc.ch,doc.priceType,doc.dd,doc.price]); 
    emit(["R" + doc.resort,doc.country,doc.city,doc.adult,doc.ch,doc.priceType,doc.dd,doc.price]); 
    } 
} 

RESORT +國家+ DEPARTURE_CITY + ADULT_COUNT + CHILD_COUNT +價格類型+ DEPARTURE_DATE起飛,讓我選擇〜40000點的記錄從3000000+(用於DEPARTURE_DATE的範圍內),但有時(根據用戶輸入),我仍然需要通過星號(例如,星號IN(4,5))過濾掉它們。也有觀點認爲排序是「按日期,價格」這個is'nt適用,例如我

20140101 110$ <- top but not cheapest 
20140101 120$ 
20140102 100$ <- cheapest but not top 
20140102 105$ 

在對方有時我也需要獲取ň最廉價旅行團,其中DepartureDate X和Y之間的價格和A和B之間Z. 所有這些方案都需要額外的過濾器來從HUGE數據集中過濾掉(即使是高選擇性的VIEW,如上所示,仍然會產生巨大的數據集,在我的情況下),並且我不想將整個數據集提取到客戶端(AppServer)進行此類處理。 。我意識到Couchbase節點上的處理將消耗更多CPU,但我更願意將更多Couchbase節點添加到羣集中。 無論如何,有人需要做這個過濾工作,我相信在數據實際放置同出額外的網絡開銷...

+0

將你的當前視圖代碼添加到你的問題中。 – scalabilitysolved

回答

0

Dimzon,

您可以排序使用descending參數的觀點所發出的鍵值。還有一個limit參數將限制您爲每個查詢獲得的響應數量。

Anon, Andrew

+0

這不適用:( – dimzon