Those methods both work with the RawClient and give good results. Thanks for the help!
Alex On Tue, Oct 25, 2011 at 1:03 PM, Russell Brown <russel...@basho.com> wrote: > > On 25 Oct 2011, at 18:48, Alexander Robbins wrote: > > > That code snippet isn't working because I've got a RawClient instance and > its mapReduce method wants a MapReduceSpec. I ran into this problem while > trying to use search also. I ended up making a search object and then > serializing it to json and providing it to the MapReduceSpec constructor, > then passing the resulting MapReduceSpec into the mapReduce method on > RawClient. Is there a better way? I considered just using String.format to > put the variables into a handwritten json string and using that to > instantiate the MapReduceSpec. > > > > Thanks! > > Alex > > > > My gross method of making a MapReduceSpec: > > final Map<String, Object> mapReduceObject = new HashMap<String, > Object>(); > > final Map<String, Object> inputs = new HashMap<String, Object>(); > > final List<Map> query = new ArrayList<Map>(); > > final List<String> searchTerms = new ArrayList<String>(); > > searchTerms.add(bucket); > > searchTerms.add(terms); > > inputs.put("module", "riak_search"); > > inputs.put("function", "mapred_search"); > > inputs.put("arg", searchTerms); > > final Map<String,String> reduce = new HashMap<String,String>(); > > reduce.put("language", "erlang"); > > reduce.put("module", "riak_kv_mapreduce"); > > reduce.put("function", "reduce_identity"); > > final Map<String,Map<String,String>> map1 = new > HashMap<String,Map<String,String>>(); > > map1.put("reduce", reduce); > > query.add(map1); > > mapReduceObject.put("inputs", inputs); > > mapReduceObject.put("query", query); > > final MapReduceSpec spec = new MapReduceSpec(new > Gson().toJson(mapReduceObject)); > > OK. So the high-level libraries are there to help, even if you have a > RawClient, try this: > > IndexQuery q = new BinValueQuery(BinIndex.named("docUID"), > "mentions", > "5b9d1a6250dbd3e77ff004a12d06958745ee32844ad4aa668001bbe69b5efcf8"); > MapReduce mr = new IndexMapReduce(YOUR_RAW_CLIENT_INSTANCE, > indexQuery); > > mr.addReducePhase(NamedErlangFunction.REDUCE_IDENTITY, > "{reduce_phase_only_1, true}"); > MapReduceResult result = mr.execute(); > Collection<String[]> r = result.getResult(String[].class); > > You can do the same thing with the search map reduce > > MapReduce mr = new SearchMapReduce(YOUR_RAW_CLIENT, "bucket", "your > search query"); > > And then use the MapReduce methods to add phases and execute as before.
_______________________________________________ riak-users mailing list riak-users@lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com