Can't find docs/tutorial on secondary indexes for riak-erlang-client

Mark Phillips mark at basho.com
Tue Mar 13 13:08:03 EDT 2012


On Sun, Mar 11, 2012 at 10:47 PM, Buri Arslon <buriwoy at gmail.com> wrote:
> No problem, Mark. I've submitted a new
> issue. https://github.com/basho/riak_wiki/issues/265
>
> By the way, thanks for the awesome Riak!

Perfect. Thanks for putting that together. Cc'ing the list in case
anyone wants to add something.

Mark

> -- buriwoy
>
>
> On Sun, Mar 11, 2012 at 11:26 PM, Mark Phillips <mark at basho.com> wrote:
>>
>> Hi Buriwoy,
>>
>> Sorry for the hassle with the docs. Good to hear you're up and running. I
>> scanned the thread really quickly and it didn't look like you mentioned
>>
>> http://wiki.basho.com/Secondary-Indexes.html
>>
>> Assuming you've seen them, can you take 15 minutes and put together your
>> thoughts on how to improve them in a wiki issue [1]. It shouldn't take
>> anyone nearly this long to get up and running with any component of Riak.
>> Our fault. Appreciate your help with fixing it.
>>
>> Mark
>>
>> 1 - https://github.com/basho/riak_wiki/issues/new
>>
>> On Mar 11, 2012, at 18:48, Buri Arslon <buriwoy at gmail.com> wrote:
>>
>> After several hours of searching, trying, getting errors ... finally I was
>> able to insert secondary index with riak-erlang-client. Here is the code
>> which I successfully ran:
>>
>>       %% Set some vars
>>    {Bucket, Key, Index} =
>> {<<"test_users">>, <<"aldarkusa">>, [{"qayerda_bin", "Qozoqta"}]}.
>>
>>    %% Connect to riak
>>    {ok, Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087).
>>
>>    %% Create a new riak object
>>    Obj = riakc_obj:new(Bucket, Key, <<"Yomonlarni aldap yurgan
>> Aldarkusa">>).
>>
>>    %% Create a new metadata with secondary index
>>    Meta = dict:store(<<"index">>, Index, dict:new()).
>>
>>    %% Update the object we've created before
>>    NewObj = riakc_obj:update_metadata(Obj, Meta).
>>
>>    %% Finally, put/insert the updated new object
>>    riakc_pb_socket:put(Pid, NewObj).
>>
>>
>> I think Basho should update/improve the documentation. Examples in Links
>> page (http://wiki.basho.com/Links.html) gave me some clues how to update
>> metadata but the examples themselves were outdated.
>>
>> Another idea is to allow users to post their examples (community content).
>>
>> Regards,
>> -- Buriwoy
>>
>> On Sun, Mar 11, 2012 at 4:14 PM, Buri Arslon <buriwoy at gmail.com> wrote:
>>>
>>> I have some clue how to add secondary index but data types are confusing
>>> for me:
>>>
>>>   > ObjNew = riakc_obj:new(<<"test_users">>, <<"adm">>, <<"My value">>).
>>>   > Index = [ <<"field1_bin">>, <<"my_index">>].
>>>   > Meta = dict:store(<<"index">>, Index, dict:new()).
>>>   > ObjNewMeta = riakc_obj:update_metadata(ObjNew, Meta).
>>>   > riakc_pb_socket:put(Pid, ObjNewMeta).
>>>      ** exception exit: {noproc,
>>>                        {gen_server,call,
>>>                            [<0.124.0>,
>>>                             {req,
>>>
>>> {rpbputreq,<<"test_users">>,<<"adm">>,undefined,
>>>                                     {rpbcontent,<<"My
>>> value">>,undefined,undefined,
>>>
>>> undefined,undefined,undefined,undefined,undefined,undefined,
>>>
>>> [{rpbpair,<<"field"...>>,[...]}]},
>>>
>>> undefined,undefined,undefined,undefined,undefined,undefined,
>>>                                     undefined},
>>>                                 60000},
>>>                             infinity]}}
>>>       in function  gen_server:call/3 (gen_server.erl, line 188)
>>>
>>> So, I don't know what the problem is. I can only guess that index data
>>> type may not be correct, but it's just guess.
>>>
>>> Any ideas?
>>> -- Buriwoy
>>>
>>> On Sun, Mar 11, 2012 at 1:05 PM, Buri Arslon <buriwoy at gmail.com> wrote:
>>>>
>>>> Thanks for your reply Jeremiah!
>>>>
>>>> I guess I am "greener" than you :)
>>>>
>>>> Before posting to the list, I looked through riak documentation, the
>>>> list. I did find some postings on the subject but almost all of'em were
>>>> questions than answers. The answers I could find were so ambiguous that I
>>>> wasn't able to use them.
>>>>
>>>> I've tried riakc_obj:update_metadata but got this
>>>> error: http://dpaste.com/715011/
>>>>
>>>> So, I hoped to find a working example. I'm too new to Erlang to read the
>>>> source and solve my problems.
>>>>
>>>> Thanks again,
>>>> -- Buriwoy
>>>>
>>>>
>>>> On Sun, Mar 11, 2012 at 12:46 PM, Jeremiah Peschka
>>>> <jeremiah.peschka at gmail.com> wrote:
>>>>>
>>>>> Howdy Buri,
>>>>>
>>>>> I'm not an Erlang expert, or even something remotely resembling
>>>>> competent with Erlang, however, I believe I have tracked down what you're
>>>>> looking for.
>>>>>
>>>>> You can use one of the riakc_pb_socket:get_index functions to pull back
>>>>> data from an index. If you look at the source on the methods, you'll see
>>>>> that they're just wrappers around a MapReduce call. As far as setting the
>>>>> values... I think you'll have to make a call to riakc_obj:update_metadata
>>>>> and add the index metadata in by hand, but I could be wrong on that one.
>>>>>
>>>>> If I'm wrong, hopefully someone on the list will correct my Erlang-y
>>>>> ignorance.
>>>>>
>>>>> get_index/4 [1]
>>>>> get_index/5 [3]
>>>>> get_index/6 [2]
>>>>> get_index/7 [4]
>>>>>
>>>>>
>>>>>
>>>>> [1]:
>>>>> https://github.com/basho/riak-erlang-client/blob/master/src/riakc_pb_socket.erl#L677
>>>>> [2]:
>>>>> https://github.com/basho/riak-erlang-client/blob/master/src/riakc_pb_socket.erl#L695
>>>>> [3]:
>>>>> https://github.com/basho/riak-erlang-client/blob/master/src/riakc_pb_socket.erl#L714
>>>>> [4]:
>>>>> https://github.com/basho/riak-erlang-client/blob/master/src/riakc_pb_socket.erl#L732
>>>>> ---
>>>>> Jeremiah Peschka - Managing Director, Brent Ozar PLF, LLC
>>>>> Microsoft SQL Server MVP
>>>>>
>>>>> On Mar 11, 2012, at 11:06 AM, Buri Arslon wrote:
>>>>>
>>>>> > Hi everybody,
>>>>> >
>>>>> > I can't find any tutorial or docs on secondary indexes. Here
>>>>> > (http://lists.basho.com/pipermail/riak-users_lists.basho.com/2011-October/005952.html)
>>>>> > it was stated that the docs would be updated but I can't find it.
>>>>> >
>>>>> > I just wanted a doc which explains how to use secondary indexes with
>>>>> > native erlang client. Riak docs have examples for http api but not for
>>>>> > erlang client.
>>>>> >
>>>>> > Can anyone refer me to appropriate docs/tutorials?
>>>>> >
>>>>> > Thanks,
>>>>> > -- Buriwoy
>>>>> > _______________________________________________
>>>>> > riak-users mailing list
>>>>> > riak-users at lists.basho.com
>>>>> > http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>>>
>>>>
>>>
>>
>> _______________________________________________
>> riak-users mailing list
>> riak-users at lists.basho.com
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>
>




More information about the riak-users mailing list