Типы данных Riak и поиск

Я использую Riak 2.0.2 и Riak-Erlang-Client 2.0.0 В документации указано, что «Поиск предпочтителен для запросов», здесь полная выдержка :

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

Существует обширная документация о том, как использовать Riak Datatype, настроить тип корзины, создать поисковый индекс и так далее. Я надеялся увидеть пример клиента 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]).

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

Спасибо.

ОБНОВЛЕНИЕ

На случай, если кто-то столкнется с подобной проблемой (пока документация Riak не включает пример для клиента erlang на http://docs.basho.com/riak/latest/dev/search/search-data-types/), парень из списка рассылки riak предоставляет ссылка на набор тестов riak, и оказалось, что 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)).

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


person toopay    schedule 01.12.2014    source источник


Ответы (1)


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

person seancribbs    schedule 01.12.2014
comment
Я застрял на Counters/Sets/Maps in the Erlang client are opaque data structures that collect operations as you mutate them. We will associate the data structure with a bucket type, bucket, and key later on. части. Как же тогда сохранить его на каком-нибудь ведре? Спасибо за ответ кстати. - person toopay; 01.12.2014
comment
Наконец-то я нашел riakc_pb_socket:update_type/4,5 по ссылке, которую вы указали выше. Было бы полезно, если бы это также было упомянуто на docs.basho.com. /riak/latest/dev/search/search-data-types - person toopay; 01.12.2014