我的map函数后面有以下输出键值对。
["hello"] => 12
["hello"] => 1
["world"] => 23
["world"] => 4
["canada"] => 18
当我使用 __ count 作为reduce函数时,我得到结果5 ,如下所示。 系统计算每一行。
{
"rows": [
{
"key": null,
"value": 5
}
]
}
我再次使用与 __ count 相同的地图功能。这次我将 group = true 添加到查询中。我得到以下结果。似乎reduce函数适用于每个分组键,并将其自身计算。
["hello"] => 2
["world"] => 2
["canada"] => 1
我无法理解这里的机制。为什么系统在分组和不分组的情况下都能正常工作。如果reduce功能适用于每个唯一键,那么在没有分组的情况下,结果是否应该如下所示?
["hello"] => 1
["hello"] => 1
["world"] => 1
["world"] => 1
["canada"] => 1
答案 0 :(得分:0)
使用reduce=true&group=false
和_count
reduce函数,您要求系统计算索引中的条目总数。因此,在您的情况下,您会看到5的预期结果。
group=true
是仅在每个密钥级别应用reduce函数的请求,而不是对所有条目进行最终求和。正如您所看到的,如果您对group=true
案例中得到的值求和,最终会得到group=false
案例的值:2 + 2 + 1 = 5.
如果你发出一个向量值的键,它会变得更加复杂,例如,你的地图上写的内容是
emit([doc.field1, doc.field2, doc.field3], 1)
然后,您可以使用group_level=X
在要分组的键的精确数量值的选择级别进行分组。这通常在处理时间序列类型数据时使用,以便能够每年或每月或每天进行分组。这在以下博客文章中有详细解释:
https://console.bluemix.net/docs/services/Cloudant/blog/mapreduce.html