我有這樣的問題與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節點添加到羣集中。 無論如何,有人需要做這個過濾工作,我相信在數據實際放置同出額外的網絡開銷...
將你的當前視圖代碼添加到你的問題中。 – scalabilitysolved