2014-12-01 3 views
1

Я использую Riak 2.0.2 и Riak-Erlang-Client 2.0.0 Документация предполагают, что "Поиск является предпочтительным для запроса", здесь full excerpt:Типы Riak данных и поиск

В общем, вы должны считать, что поиск является выбором по умолчанию для почти всех запросов, которые выходят за рамки основных операций CRUD/KV. Если ваш случай использования требует своего рода механизма запросов, и вы в сомневаетесь в том, что использовать, вы должны предположить, что поиск - это правильный инструмент .

Существует обширная документация о том, как использовать тип данных Riak, настраиваемый тип ведра, создание индекса поиска и т. Д. Я надеялся увидеть пример клиента riak на http://docs.basho.com/riak/latest/dev/search/search-data-types/, но я не нашел его.

Я пробую следующий путь.

Создание типа ковша, что и использует Riak тип данных и содержит индексный поиск

riak-admin bucket-type create counters '{"props":{"datatype":"counter"}}' 
riak-admin bucket-type activate counters 
curl -XPUT $RIAK_HOST/search/index/scores \ 
    -H 'Content-Type: application/json' \ 
    -d '{"schema":"_yz_default"}' 
riak-admin bucket-type update counters '{"props":{"search_index":"scores"}}' 

используемого кода в приложении.

Counter = riakc_counter:new(). 
ChristopherHitchensCounter = riakc_counter:increment(5, Counter). 

{ok, Pid} = riakc_pb_socket:start("127.0.0.1",8087). 
ChristopherHitchens = riakc_obj:new({<<"counters">>, <<"people">>}, <<"christopher_hitchens">>, 
    ChristopherHitchensCounter, 
    "application/riak_counter"), 
riakc_pb_socket:put(Pid, ChristopherHitchens). 

На данный момент, я надеюсь, что я мог бы запросить некоторый счетчик с помощью

{ok, Results} = riakc_pb_socket:search(Pid, <<"scores">>, <<"counter:[* TO 15]">>), 
io:fwrite("~p~n", [Results]), 
Docs = Results#search_results.docs, 
io:fwrite("~p~n", [Docs]). 

Но это не кажется, работает. Любой руководство по этому вопросу будет оценено по достоинству.

Спасибо.

UPDATE

В случае, если кто-то наткнуться на аналогичный вопрос (пока Riak документация не содержит пример для Erlang клиента на http://docs.basho.com/riak/latest/dev/search/search-data-types/), парень из списка Riak рассылки предоставляет link to riak test suite, и его оказалось, что riakc_pb_socket:update_type/4 является обязательным методом связать тип данных riak. Я изменить предыдущий используемый код:

Counter = riakc_counter:new(). 
ChristopherHitchensCounter = riakc_counter:increment(5, Counter). 

{ok, Pid} = riakc_pb_socket:start("127.0.0.1",8087). 
riakc_pb_socket:update_type(Pid,{<<"counters">>,<<"people">>},<<"christopher_hitchens">>,riakc_counter:to_op(ChristopherHitchensCounter)). 

И теперь я могу выполнить запрос поиска на моих индексов :)

ответ

1

счетчиков и других типов данных, не манипулируют с помощью riakc_obj. См. Страницу документации здесь http://docs.basho.com/riak/latest/dev/using/data-types/ и выберите вкладку «Erlang» на примерах.

+0

Я застрял на 'Counters/Sets/Maps в клиенте Erlang - непрозрачные структуры данных, которые собирают операции по мере их мутации. Мы свяжем данные структуры с ведром, ведром и ключом позже. Как мы можем сохранить его на каком-то ковше? Спасибо за ответ кстати. – toopay

+0

Наконец-то я нашел 'riakc_pb_socket: update_type/4,5' ссылку, указанную выше. Было бы полезно, если бы это также упоминалось на http://docs.basho.com/riak/latest/dev/search/search-data-types/ – toopay

Смежные вопросы