Mapreduce cloudant索引:统计每个时间段的唯一用户数

Mapreduce cloudant索引:统计每个时间段的唯一用户数,mapreduce,lucene,couchdb,cloudant,nosql,Mapreduce,Lucene,Couchdb,Cloudant,Nosql,有人就这个问题发表了一篇非常类似的帖子。在cloudant中,我有一个文档结构,用于存储用户访问应用程序的时间,如下所示: {“用户名”:“一”,“时间戳”:“2015-10-07T15:04:46Z”}--|当天 {“用户名”:“一”,“时间戳”:“2015-10-07T19:22:00Z”}--^ {“用户名”:“一”,“时间戳”:“2015-10-25T04:22:00Z”} {“用户名”:“两个”,“时间戳”:“2015-10-07T19:22:00Z”} 我想知道的是,在给定的时间段内

有人就这个问题发表了一篇非常类似的帖子。在cloudant中,我有一个文档结构,用于存储用户访问应用程序的时间,如下所示:

{“用户名”:“一”,“时间戳”:“2015-10-07T15:04:46Z”}
--|当天
{“用户名”:“一”,“时间戳”:“2015-10-07T19:22:00Z”}
--^
{“用户名”:“一”,“时间戳”:“2015-10-25T04:22:00Z”}

{“用户名”:“两个”,“时间戳”:“2015-10-07T19:22:00Z”}

我想知道的是,在给定的时间段内,计算唯一用户的数量。例:

2015-10-07={“计数”:2}
2015-10-07访问的两个不同用户
2015-10-25={“计数”:1}
2015-10-25上访问的一个不同用户
2015={“count”2}
2015年访问的两个不同用户

这一切都变得很棘手,因为例如在2015-10-07,“用户名:一”有两条访问记录,但它应该只返回唯一用户总数的1

我试过:

function(doc) {
    var time = new Date(Date.parse(doc['timestamp'])); 
    emit([time.getUTCFullYear(),time.getUTCMonth(),time.getUTCDay(),doc.username], 1);
}
这有几个问题,耶稣·阿尔瓦(Jesus Alva)在我上面链接的帖子中强调了这一点


谢谢

也许有更好的方法,但我想

您可以尝试为每个粒度级别发出索引:

function(doc) {
    var time = new Date(Date.parse(doc['timestamp'])); 
    var year = time.getUTCFullYear();
    var month = time.getUTCMonth()+1;
    var day = time.getUTCDate();

    // day granularity
    emit([year,month,day,doc.username], null);

    // year granularity
    emit([year,doc.username], null);
}

// reduce function - `_count`
日期查询(2015-10-07):

日查询结果-应用程序代码将计算行数:

{"rows":[
  {"key":[2015,10,7,"one"],"value":2},
  {"key":[2015,10,7,"two"],"value":1}
]}
{"rows":[
  {"key":[2015,"one"],"value":3},
  {"key":[2015,"two"],"value":1}
]}
年份查询:

inclusive_end=true&
start_key=[2015, "\u0000"]&
end_key=[2015, "\uefff"]&
reduce=true&
group=true
查询结果-应用程序代码将计算行数:

{"rows":[
  {"key":[2015,10,7,"one"],"value":2},
  {"key":[2015,10,7,"two"],"value":1}
]}
{"rows":[
  {"key":[2015,"one"],"value":3},
  {"key":[2015,"two"],"value":1}
]}

啊,我没有意识到我可以从同一个视图发出多种类型。快速提问--“\u0000”和“\uefff”的用途是什么?它们表示大小unicode值。它基本上是指包含此属性的每个值。啊!就像一个小通配符,我喜欢它。我想最后一件事是“包容结束”有什么作用?我将把这个问题标记为已解决,顺便说一句,谢谢!!!没关系,我注意到它是一个包含结束键值的标志