为什么Riak map使用具有特殊字符“+”的键上的键过滤器减少不起作用?

时间:2013-07-23 21:32:30

标签: mapreduce riak

我正在尝试在我的riak数据库上运行以下map / reduce查询:

curl -XPOST http://localhost:8098/mapred \
     -H 'Content-Type: application/json' \
     -d '{"inputs":{"bucket":"my_customers","key_filters":[["eq","sales+p3@dummy3.gr"]]},"query":[{"map":{"language":"javascript","source":"function(v) {var results = []; results.push(v); return results;}"}}]}' 

存储桶my_customers包含键sales+p3@dummy3.gr的值,但此map / reduce查询返回的结果为空数组。

如果我更改查询以搜索具有键sales@dummy.gr的另一个值,该值也存在,则返回结果没有问题。

我怀疑问题出在角色+周围,这是密钥的一部分。

提前致谢。

1 个答案:

答案 0 :(得分:0)

通过列出存储桶中的密钥来检查您的密钥。我怀疑这里有一个网址编码问题而且密钥实际上有一个空格而不是+

当您对HTTP API执行PUT / POST操作时,Riak端实际上会对存储桶中的存储桶和密钥进行url解码,并将+视为空格。当您使用+%2B)对该密钥进行PUT / POST时,您需要对/buckets/mybucket/keys/sales%2Bp3@dummy3.gr进行urlencode,如果您正在进行常规GET检索,请执行相同操作。