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();
誰かが私の間違いを見ますか?
乾杯
エイプハンガー