我正在尝试在我的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
的另一个值,该值也存在,则返回结果没有问题。
我怀疑问题出在角色+
周围,这是密钥的一部分。
提前致谢。
答案 0 :(得分:0)
通过列出存储桶中的密钥来检查您的密钥。我怀疑这里有一个网址编码问题而且密钥实际上有一个空格而不是+
。
当您对HTTP API执行PUT / POST操作时,Riak端实际上会对存储桶中的存储桶和密钥进行url解码,并将+
视为空格。当您使用+
(%2B
)对该密钥进行PUT / POST时,您需要对/buckets/mybucket/keys/sales%2Bp3@dummy3.gr
进行urlencode,如果您正在进行常规GET检索,请执行相同操作。