我正在玩 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();
有人看到我的错误吗?
干杯
猿衣架