Riak数据类型和搜索

时间:2014-12-01 13:11:29

标签: erlang riak riak-search

我使用的是Riak 2.0.2和Riak-Erlang-Client 2.0.0文档建议"搜索首选查询",这里是full excerpt

  

通常,您应该将搜索视为默认选项   几乎所有的查询需求都超出了基本的CRUD / KV操作。如果   你的用例需要某种查询机制,你就可以了   怀疑使用什么,你应该假设搜索是正确的   适合你的工具。

有关于如何使用Riak数据类型,设置存储桶类型,创建搜索索引等的大量文档。我希望在http://docs.basho.com/riak/latest/dev/search/search-data-types/上看到riak客户端示例,但我找不到。

我尝试以下路径。

创建既使用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文档包含http://docs.basho.com/riak/latest/dev/search/search-data-types/上的erlang客户端示例),来自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 个答案:

答案 0 :(得分:1)

计数器和其他数据类型不通过riakc_obj进行操作。请参阅此处的文档页面http://docs.basho.com/riak/latest/dev/using/data-types/并选择&#34; Erlang&#34;示例选项卡。