我在學習如何使用Couchbase的地圖縮減功能。直到現在,我使用Where使用多項術語(添加和減去術語)並修改組部分來創建基於SQL的報表引擎。Couchbase Reduce功能
我正在嘗試使用視圖創建此報表引擎。
我的問題是如何創建一個報告,使用戶能夠潛入並找到越來越多的數據,獲取個人ip統計數據。例如, 。今天有多少點擊?哪個流量來源?他們看到了什麼?哪個國家 ?和等。
我在這個例子中基本的文檔是這樣的:
"1"
{
"date": "2014-01-13 10:00:00",
"ip": "111.222.333.444",
"country": "US",
"source":"1",
}
"2"
{
"date": "2014-01-13 10:00:00",
"ip": "555.222.333.444",
"country": "US",
"source":"1",
}
"3"
{
"date": "2014-01-13 11:00:00",
"ip": "111.888.888.888",
"country": "US",
"source":"2",
}
"4"
{
"date": "2014-01-13 11:00:00",
"ip": "111.777.777.777",
"country": "US",
"source":"1",
}
所以我想,讓用戶看到的第一個畫面,有多少點擊,每天也有在這個網站。 所以我需要計算點擊次數。簡單的地圖/減少: MAP:
function (doc, meta) {
emit(dateToArray(doc.date),1);
}
Reduce:
_count
組級別4,組真
將創建每小時點擊的總和。
現在,如果我想允許一個國家的分解,所以我需要一個動態的參數來改變..從我明白它只能由組級別.. 所以假設我已經添加到發射像這樣:
emit([dateToArray(doc.date),source],1);
,然後分組5級將讓這道鴻溝,並使用該密鑰太專注於certein日期..但如果我需要添加一個縣打破?再次添加到發射? 這似乎是一個爛攤子,如果我想要做一個國家統計之前的來源..有沒有更聰明的方法來做到這一點?
第二部分...
,如果我想獲得第一計數如下:
[2014,1,28,10] {ip:"555.222.333.444","111.222.333.444","count":"2"}
我希望看到所有的都算這一次的IPS ... 如何我應該寫我的減少功能嗎?
這是我那不工作的當前狀態..
function(key, values, rereduce) {
var result = {id: 0, count: 0};
for(i=0; i < values.length; i++) {
if(rereduce) {
result.id = result.id + (values[i]).ip +',';
result.count = result.count + values[i].count;
} else {
result.id = values.ip;
result.count = values.length;
}
}
return result;
我沒有得到答案的格式我一直在尋找..
我希望這不是令人眼花繚亂的,並且你能幫助我與此..
謝謝!!
感謝這個答案,我試圖讓它只使用視圖的工作,我認爲彈性搜索服務器將能夠做到這一點與出問題。 –
我正在建議Elasticsearch,但不知道這是否是您的選擇。 – theMayer