there is a bug in BinIndexQuery - I've overriden some classes and now it is working (with orginal sources of client). Use MyBinIndexQuery instead of BinIndexQuery. Problem is that _BIN in always apppended to name of index.
import com.basho.riak.client.api.commands.CoreFutureAdapter import com.basho.riak.client.api.commands.indexes.BinIndexQuery import com.basho.riak.client.api.commands.indexes.SecondaryIndexQuery import com.basho.riak.client.core.RiakCluster import com.basho.riak.client.core.RiakFuture import com.basho.riak.client.core.operations.SecondaryIndexQueryOperation import com.basho.riak.client.core.query.Location import com.basho.riak.client.core.query.Namespace import com.basho.riak.client.core.util.BinaryValue import java.nio.charset.Charset abstract class MyInit<S, T extends MyInit<S,T>> extends SecondaryIndexQuery.Init<S,T> { Charset charset = Charset.defaultCharset(); public MyInit(Namespace namespace, String indexName, S start, S end) { // super(namespace, indexName + SecondaryIndexQuery.Type._BIN, start, end); super(namespace, indexName, start, end); } public MyInit(Namespace namespace, String indexName, S match) { // super(namespace, indexName + SecondaryIndexQuery.Type._BIN, match); super(namespace, indexName, match); } T withCharacterSet(Charset charset) { this.charset = charset; return self(); } } public class MyBuilder extends MyInit<String, MyBuilder> { public MyBuilder(Namespace namespace, String indexName, String start, String end) { super(namespace, indexName, start, end); } public MyBuilder(Namespace namespace, String indexName, String match) { super(namespace, indexName, match); } @Override protected MyBuilder self() { return this; } public MyBinIndexQuery build() { return new MyBinIndexQuery(this); } } public class MyBinIndexQuery extends SecondaryIndexQuery<String, BinIndexQuery.Response, BinIndexQuery> { private final Charset charset; private final SecondaryIndexQuery.IndexConverter<String> converter; public MyBinIndexQuery(MyInit<String,?> builder) { super(builder); this.charset = builder.charset; this.converter = new SecondaryIndexQuery.IndexConverter<String>() { @Override public String convert(BinaryValue input) { return input.toString(charset); } @Override public BinaryValue convert(String input) { return BinaryValue.create(input, charset); } }; } @Override protected SecondaryIndexQuery.IndexConverter<String> getConverter() { return converter; } @Override protected RiakFuture<MyResponse, MyBinIndexQuery> executeAsync(RiakCluster cluster) { RiakFuture<SecondaryIndexQueryOperation.Response, SecondaryIndexQueryOperation.Query> coreFuture = executeCoreAsync(cluster); BinQueryFuture future = new BinQueryFuture(coreFuture); coreFuture.addListener(future); return future; } protected final class BinQueryFuture extends CoreFutureAdapter<MyResponse, MyBinIndexQuery, SecondaryIndexQueryOperation.Response, SecondaryIndexQueryOperation.Query> { public BinQueryFuture(RiakFuture<SecondaryIndexQueryOperation.Response, SecondaryIndexQueryOperation.Query> coreFuture) { super(coreFuture); } @Override protected MyResponse convertResponse(SecondaryIndexQueryOperation.Response coreResponse) { return new MyResponse(namespace, coreResponse, converter); } @Override protected MyBinIndexQuery convertQueryInfo(SecondaryIndexQueryOperation.Query coreQueryInfo) { return MyBinIndexQuery.this; } } protected static abstract class Init<S, T extends Init<S,T>> extends SecondaryIndexQuery.Init<S,T> { private Charset charset = Charset.defaultCharset(); public Init(Namespace namespace, String indexName, S start, S end) { super(namespace, indexName + Type._BIN, start, end); } public Init(Namespace namespace, String indexName, S match) { super(namespace, indexName + Type._BIN, match); } T withCharacterSet(Charset charset) { this.charset = charset; return self(); } } /** * Builder used to construct a BinIndexQuery. */ public static class Builder extends Init<String, Builder> { /** * Construct a Builder for a BinIndexQuery with a range. * <p> * Note that your index name should not include the Riak {@literal _int} or * {@literal _bin} extension. * <p> * @param namespace The namespace in Riak to query. * @param indexName The index name in Riak to query. * @param start The start of the 2i range. * @param end The end of the 2i range. */ public Builder(Namespace namespace, String indexName, String start, String end) { super(namespace, indexName, start, end); } /** * Construct a Builder for a BinIndexQuery with a single 2i key. * <p> * Note that your index name should not include the Riak {@literal _int} or * {@literal _bin} extension. * <p> * @param namespace The namespace in Riak to query. * @param indexName The name of the index in Riak. * @param match the 2i key. */ public Builder(Namespace namespace, String indexName, String match) { super(namespace, indexName, match); } @Override protected Builder self() { return this; } /** * Construct the query. * @return a new BinIndexQuery */ public MyBinIndexQuery build() { return new MyBinIndexQuery(this); } } public static class MyResponse extends SecondaryIndexQuery.Response<String> { final SecondaryIndexQueryOperation.Response coreResponseCopy; final SecondaryIndexQuery.IndexConverter<String> converterCopy; protected MyResponse(Namespace queryLocation, SecondaryIndexQueryOperation.Response coreResponse, SecondaryIndexQuery.IndexConverter<String> converter) { super(queryLocation, coreResponse, converter); this.coreResponseCopy = coreResponse this.converterCopy = converter } @Override public List<MyEntry> getEntries() { List<MyEntry> convertedList = new ArrayList<MyEntry>(); for (SecondaryIndexQueryOperation.Response.Entry e : coreResponseCopy.getEntryList()) { Location loc = getLocationFromCoreEntry(e); MyEntry ce = new MyEntry(loc, e.getIndexKey(), converterCopy); convertedList.add(ce); } return convertedList; } public class MyEntry extends SecondaryIndexQuery.Response.Entry<String> { protected MyEntry(Location riakObjectLocation, BinaryValue indexKey, SecondaryIndexQuery.IndexConverter<String> converter) { super(riakObjectLocation, indexKey, converter); } } } } -- View this message in context: http://riak-users.197444.n3.nabble.com/Using-bucket-index-in-java-client-tp4032125p4032199.html Sent from the Riak Users mailing list archive at Nabble.com. _______________________________________________ riak-users mailing list riak-users@lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com