3

我正在玩 riak 和 riak-java-client。

现在我遇到了自定义 javascript 的问题,我想在 map reduce 查询中使用。

如果我使用纯 javascript 函数作为匿名函数,它们运行良好。

所以这就是我所做的:

在 app.conf 中未注释

{js_source_dir, "/tmp/js_source"},

然后我将 mylib.js 存储在 /tmp/js_source

/* content of mylib.js */
var NS = (function() {
    return {
        mapHighValues: function(value, keydata, arg) {
            var data = JSON.parse(value.values[0].data);
            ejsLog('/tmp/map_reduce.log', JSON.stringify(data.High));
             return [data.High];}
        },
        reduceSumHighValues: function(values) {
            ejsLog('/tmp/map_reduce.log', "ReduceVals\n" + JSON.stringify(values));
            return [values.reduce(function(prev, curr, index, array) {return prev + curr} ,0)];
        }
    }
})();

之后我重新启动了riak。

这是相关的java代码:

MapReduceBuilder builder = new MapReduceBuilder(new RiakClient("localhost"))
    .setBucket("goog")
    .map(JavascriptFunction.named("NS.mapHighValues"), false)
    .reduce(JavascriptFunction.named("NS.reduceSumHighValues"), true);
MapReduceResponseSource response = builder.submit();

有人看到我的错误吗?

干杯

猿衣架

4

1 回答 1

1

'return [data.High];' 之后看起来像一个额外的 '}'

于 2012-05-08T01:06:13.427 回答