Secondary index maintenance

Russell Brown russell.brown at
Wed Feb 20 09:53:08 EST 2013

On 20 Feb 2013, at 14:35, Theo Bot < at> wrote:

> Hi
> It's not that I want to use the erlang client. It's just that I want to know to to create http queries to maintain the secondary indexes.

Ah, OK.

Sorry for the confusion. Updating the indexes is just like updating a value or any other object meta-data in riak, you need to fetch the whole value, change it, and send it back.

To delete all the indexes for a key just POST that keys value to riak's HTTP, without the x-riak-index headers.
To remove particular index(es) just POST that keys value to riak's HTTP interface minus the x-riak-index headers for the index you want to remove.

For example, say you created (as per the riak docs example[1]) 

    curl -X POST \
    -H 'x-riak-index-twitter_bin: jsmith123' \
    -H 'x-riak-index-email_bin: jsmith at' \
    -d'...user data...' \

When you read the data back with `curl -v localhost:8098/buckets/users/keys/john_smith` you get:

< HTTP/1.1 200 OK
< X-Riak-Vclock: a85hYGBgzGDKBVIcypz/fgbKiqhmMCUy57EyfImZeYovCwA=
< x-riak-index-twitter_bin: jsmith123
< x-riak-index-email_bin: jsmith at
< Vary: Accept-Encoding
< Server: MochiWeb/1.1 WebMachine/1.9.2 (someone had painted it blue)
< Link: </buckets/users>; rel="up"
< Last-Modified: Wed, 20 Feb 2013 14:43:00 GMT
< ETag: "7DdYGiY7JujKiCVTTXp51M"
< Date: Wed, 20 Feb 2013 14:43:10 GMT
< Content-Type: application/x-www-form-urlencoded
< Content-Length: 15
* Connection #0 to host localhost left intact
...user data...* Closing connection #0

Those x-riak-index headers are your indexes. To remove one just post back the object, minus the index you want to remove. So to drop the 'twitter' index:

curl -X POST  http://localhost:8098/buckets/users/keys/john_smith -d"...user data..." \
 -H"X-Riak-Vclock: a85hYGBgzGDKBVIcypz/fgbKiqhmMCUy57EyfImZeYovCwA=" \
 -H 'x-riak-index-email_bin: jsmith at'

When you read the value again you'll see it now only has one index.

I guess your client will need to parse out those index headers into some useful structure, and expose a way for the user to add / edit / remove indexes, and your client then needs to generate headers to post back to riak.

Does that cover it?




> Theo
> On Wed, Feb 20, 2013 at 3:30 PM, Christian Dahlqvist <christian at> wrote:
> Hi Theo,
> The Riak HTTP client for Erlang uses the 'riakc_obj' from the PB client to represent records. You can therefore use any utility functions available there to manipulate metadata. The HTTP client for Erlang does however currently not support secondary indexes [1], meaning that these will not be parsed nor sent when getting or putting an object.
> [1]
> Best regards,
> Christian
> On 20 Feb 2013, at 08:41, Theo Bot < at> wrote:
>> Hi
>> I found in the erlang client that there are methods (clear_secondary_indexes, delete_secondary_index) in the pb api to maintain the secondary index of objects. However in the http api I cannot find such methods.
>> -- 
>> Kind regards
>> Theo Bot
>> Network Management Engineer
>> e-mail: at
>> Website:
>> LinkedIn:
>> _______________________________________________
>> riak-users mailing list
>> riak-users at
> -- 
> Met vriendelijke groet,
> Theo Bot
> Network Management Engineer
> Tel: +31653965698
> e-mail: at
> Website:
> LinkedIn:
> _______________________________________________
> riak-users mailing list
> riak-users at

More information about the riak-users mailing list