Thanks *Russel* for a very clear and detailed explanation.

Also I would like to know if it is possible to query on 2 or more indices
in a single indexQuery ?

On Wed, Feb 22, 2012 at 10:59 PM, Russell Brown <russel...@basho.com> wrote:

> Hi Rajat,
>
> Answers inline below.
>
> On 22 Feb 2012, at 16:44, Rajat Mathur wrote:
>
> I am running following IndexQuery :
>
> <code>
>         IntIndex intIndex=IntIndex.named("points");
>
>     IndexQuery iQuery = new IntRangeQuery(intIndex,"fkUsers",1100,1300);
>
>     MapReduceResult
> resultInt=client.mapReduce(iQuery).addReducePhase(NamedErlangFunction.REDUCE_IDENTITY).execute();
>
>     Collection<ArrayList> res=resultInt.getResult(ArrayList.class);
>
>     Iterator<ArrayList> it=res.iterator();
>
>     while ((it.hasNext())){
>
>         ArrayList arrayList=it.next();
>         Bucket bucket=
> client.fetchBucket(arrayList.get(0).toString()).execute();
>         for( int i=1;i<arrayList.size();i+=2){
>             IRiakObject
> object=bucket.fetch(arrayList.get(i).toString()).execute();
>             log("Query Result : " + object.getValueAsString());
>     }
>
> </code>
>
> I am not able to understand the exact result format *getResult* method of
> *MapReduceResult* class is giving. Right now It is giving* Buckets *along
> with *ids*
> Is there any better method to parse result or it depends on my query ?
>
>
> Your index query returns a list of Bucket/Key pairs. If you want all the
> data too you can fetch it or have your MapReduce query return it (see
> below.) If you just want the keys you can use the Bucket like this:
>
> List<String> keys =
>  bucket.fetchIndex(IntIndex.named("points")).from(1100).to(1300).execute();
>
> Also please suggest other better methods(if any) for performing such
> queries .
>
>
> Your code above is not ideal. If you want the actual object values back
> from an index range query then it might be better for MapReduce to return
> them rather than you sequentially fetching each one.
>
> In which case you could use
>
>     MapReduceResult resultInt=client.mapReduce(iQuery)
>
> .addMapPhase(new NamedErlangFunction("riak_kv_mapreduce", "map_object_value"))
> .execute();
>
> Then you can get your results as before. If you data payload is JSON then
> getResult(YourDomainClass.class) will use Jackson to automatically
> transform the result. Or you can use getResults(Map.class) to get a
> collection of Map.class instances (again, courtesy of Jackson).
>
> If you want access to the raw JSON returned by the query getResultRaw()
> will get you it as a string.
>
> Whether that is faster than firing up N threads and fetching the data in
> parallel depends…
>
> BTW fetching a Bucket actually issues a request, so looping like that and
> fetching bucket after bucket is a bad idea, especially when 2i query can
> only be run on a single bucket, so you are in effect fetching the same
> bucket over and over again.
>
> Cheers
>
> Russell
>
>
>
> --
> *Rajat Mathur
> B.Tech (IT) Final Year
> IIIT Allahabad
>
> 09945990291
>
> Find me @ Facebook <http://www.facebook.com/rajatmathurr>
> Follow me @ Twitter <http://www.twitter.com/Raj_Mathur>*
> _______________________________________________
> riak-users mailing list
> riak-users@lists.basho.com
> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>
>
>


-- 
*Rajat Mathur
B.Tech (IT) Final Year
IIIT Allahabad

09945990291

Find me @ Facebook <http://www.facebook.com/rajatmathurr>
Follow me @ Twitter <http://www.twitter.com/Raj_Mathur>*
_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to