0

我正在尝试在我的 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 查询返回的结果是一个空数组。

如果我更改查询以使用也存在的 key 搜索另一个值sales@dummy.gr,它会毫无问题地返回结果。

我怀疑问题+出在关键的字符周围。

提前致谢。

4

1 回答 1

0

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

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

于 2013-07-23T21:57:24.947 回答