Riak 2.0.2 と Riak-Erlang-Client 2.0.0 を使用しています。ドキュメントでは、「クエリには検索が優先される」ことが示唆されています。ここでは、完全な抜粋を示します。
一般に、検索は、基本的な CRUD/KV 操作を超えるほぼすべてのクエリのニーズに対する既定の選択肢であると考える必要があります。ユース ケースで何らかのクエリ メカニズムが必要で、何を使用すればよいかわからない場合は、検索が適切なツールであると想定する必要があります。
Riak Datatype の使用方法、バケット タイプの設定方法、検索インデックスの作成方法などに関する広範なドキュメントがあります。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 メーリング リストの担当者が提供します。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)).
そして今、私は自分のインデックスで検索クエリを実行できます:)