我正试图在我的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;}"}}]}'
bucket my_customers
包含关键字为sales+p3@dummy3.gr
的值,但是从这个map/reduce查询返回的结果是一个空数组。
如果我将查询更改为使用关键字sales@dummy.gr
搜索另一个值(该值也存在),它将毫无问题地返回结果。
我怀疑问题出在字符+
上,它是关键的一部分。
提前谢谢。
通过列出存储桶中的密钥来检查密钥。我怀疑这里存在url编码问题,并且密钥实际上有一个空格而不是+
。
当您对HTTP API执行PUT/POST操作时,Riak端实际上对URL中的桶和密钥进行了urdecoded,并将+
视为一个空间。当使用%2B
(/buckets/mybucket/keys/sales%2Bp3@dummy3.gr
)对+
进行PUT/POST时,您将需要对该密钥进行URL编码,如果您正在进行常规GET来检索它,也可以这样做。