Couchbase附加过滤器
我对couchbase设计有这样的问题:查询视图返回40000条记录。我需要添加额外的过滤器对他们和获得前100名的订单 我在我的应用程序代码中进行了这样的过滤/排序,这意味着我必须从Couchbase获取40000条记录,这非常耗时。有没有一种方法可以在couchbase节点上执行筛选/排序,而无需将整个4000条记录提取到appserver 我的数据是旅游旅行Couchbase附加过滤器,couchbase,Couchbase,我对couchbase设计有这样的问题:查询视图返回40000条记录。我需要添加额外的过滤器对他们和获得前100名的订单 我在我的应用程序代码中进行了这样的过滤/排序,这意味着我必须从Couchbase获取40000条记录,这非常耗时。有没有一种方法可以在couchbase节点上执行筛选/排序,而无需将整个4000条记录提取到appserver 我的数据是旅游旅行 { "OT": "tour", "dd": 20140720, "city": 1206, "hotel":
{
"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"
}
我需要选择从伦敦到土耳其最便宜的十大旅行团,时间为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]);
}
}
度假村+国家/地区+出发城市+成人人数+儿童人数+价格类型+出发日期允许我从3000000+中选择约40000条记录作为出发日期范围,但有时根据用户输入,我仍需要按4,5中的星星进行筛选。另外,视图排序是按日期,价格这是不适用的,例如我得到的
20140101 110$ <- top but not cheapest
20140101 120$
20140102 100$ <- cheapest but not top
20140102 105$
在另一边,有时我还需要买N个最便宜的旅行团,出发日期在x和Y之间,价格在A和Z之间。
所有这些场景都需要额外的过滤器从巨大的数据集中过滤出来,即使是上面所示的高选择性视图,在我的情况下仍然会生成巨大的数据集,我不希望将整个数据集提取到客户端AppServer进行这样的处理。。。我意识到Couchbase节点上的处理将消耗更多的CPU,但我更喜欢将更多Couchbase节点添加到集群中。。。
不管怎么说,有人需要做这种过滤工作,我相信在没有额外网络开销的情况下,在实际放置数据的地方进行过滤更为理想…Dimzon
可以使用降序参数根据视图发出的键的值进行排序。还有一个limit参数,它将限制每个查询获得的响应数量
安侬,
Andrew将当前视图代码添加到问题中。这不适用: