brew install riak
## To enable Search set this 'on'. ## ## Default: off ## ## Acceptable values: ## - on or off search = on
echo kern.maxfiles=65536 >> /etc/sysctl.conf echo kern.maxfilesperproc=65536 >> /etc/sysctl.conf sudo sysctl -w kern.maxfiles=65536 sudo sysctl -w kern.maxfilesperproc=65536 echo ulimit -n 65536 65536 >> ~/.bash_profile ulimit -n 65536 65536
riak console
riak-admin test
riak-admin bucket-type create documents-type '{"props":{"datatype":"map"}}' riak-admin bucket-type activate documents-type
<field name="title_register" type="string" indexed="true" stored="false" multiValued="fase" /> <field name="body_register" type="text_ru" indexed="true" stored="false" multiValued="true" /> <field name="tags_set" type="string" indexed="true" stored="false" multiValued="true" /> <field name="created_at_register" type="tdate" indexed="true" stored="false" multiValued="false" omitNorms="true" />
<?xml version="1.0" encoding="UTF-8" ?> <schema name="schedule" version="1.5"> <fields> <field name="title_register" type="string" indexed="true" stored="false" multiValued="fase" /> <field name="body_register" type="text_ru" indexed="true" stored="false" multiValued="true" /> <field name="tags_set" type="string" indexed="true" stored="false" multiValued="true" /> <field name="created_at_register" type="tdate" indexed="true" stored="false" multiValued="false" omitNorms="true" /> <!-- --> <dynamicField name="*" type="ignored" /> <!-- Riak Search--> <field name="_yz_id" type="_yz_str" indexed="true" stored="true" multiValued="false" required="true"/> <field name="_yz_ed" type="_yz_str" indexed="true" stored="false" multiValued="false"/> <field name="_yz_pn" type="_yz_str" indexed="true" stored="false" multiValued="false"/> <field name="_yz_fpn" type="_yz_str" indexed="true" stored="false" multiValued="false"/> <field name="_yz_vtag" type="_yz_str" indexed="true" stored="false" multiValued="false"/> <field name="_yz_rk" type="_yz_str" indexed="true" stored="true" multiValued="false"/> <field name="_yz_rt" type="_yz_str" indexed="true" stored="true" multiValued="false"/> <field name="_yz_rb" type="_yz_str" indexed="true" stored="true" multiValued="false"/> <field name="_yz_err" type="_yz_str" indexed="true" stored="false" multiValued="false"/> </fields> <uniqueKey>_yz_id</uniqueKey> <types> <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0" sortMissingLast="true" /> <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" /> <filter class="solr.SnowballPorterFilterFactory" language="Russian"/> <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> --> </analyzer> </fieldType> <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" /> <!-- YZ String: Used for non-analyzed fields --> <fieldType name="_yz_str" class="solr.StrField" sortMissingLast="true" /> </types> </schema>
# : git clone https://github.com/basho/riak-erlang-client.git cd riak-erlang-client/ make cd .. # REPL: erl -pa riak-erlang-client/ebin riak-erlang-client/deps/*/ebin
{ok, RiakPid} = riakc_pb_socket:start_link("127.0.0.1", 8087). % pong = riakc_pb_socket:ping(RiakPid).
{ok, Schema} = file:read_file("docs_search_schema.xml"). ok = riakc_pb_socket:create_search_schema(RiakPid, <<"documents-schema">>, Schema). ok = riakc_pb_socket:create_search_index(RiakPid, <<"documents-index">>, <<"documents-schema">>, []).
ok = riakc_pb_socket:set_search_index(RiakPid, {<<"documents-type">>, <<"documents-bucket">>}, <<"documents-index">>).
Map = riakc_map:new(). % - (register) Map1 = riakc_map:update({<<"title">>, register}, fun(Reg) -> riakc_register:set(<<"DocumentTitle">>, Reg) end, Map). % - (register) Map2 = riakc_map:update({<<"body">>, register}, fun(Reg) -> riakc_register:set(<<"Some Document Body">>, Reg) end, Map1). % - (set) Map3 = riakc_map:update({<<"tags">>, set}, fun(Set) -> Set1 = riakc_set:add_element(<<"Tag One">>, Set), Set2 = riakc_set:add_element(<<"Tag Two">>, Set1), Set2 end, Map2). % - (register) Map4 = riakc_map:update({<<"created_at">>, register}, fun(Reg) -> % C Solr ISO8601. % https://cwiki.apache.org/confluence/display/solr/Working+with+Dates. ISODateFmtStr = "~4.10.0B-~2.10.0B-~2.10.0BT~2.10.0B:~2.10.0B:~2.10.0BZ", {{Year, Month, Day}, {Hour, Min, Sec}} = calendar:universal_time(), ISODate = list_to_binary(io_lib:format(ISODateFmtStr, [Year, Month, Day, Hour, Min, Sec])), riakc_register:set(ISODate, Reg) end, Map3). % MapOperations = riakc_map:to_op(Map4). ok = riakc_pb_socket:update_type(RiakPid, {<<"documents-type">>, <<"documents-bucket">>}, <<"DocumentKey">>, MapOperations).
% Riak Client. rr("riak-erlang-client/include/riakc.hrl"). % , {ok, Results} = riakc_pb_socket:search(RiakPid, <<"documents-index">>, <<"title_register:DocumentTitle AND tags_set:\"Tag One\" AND body_register:Some AND created_at_register:[1972-05-20T17:33:18Z TO NOW]">>). % Docs = Results#search_results.docs. lists:foldr(fun({_Index, Doc}, Acc) -> {_, DocumentId} = lists:keyfind(<<"_yz_rk">>, 1, Doc), {ok, {map, Image, _, _, _}} = riakc_pb_socket:fetch_type(RiakPid, {<<"documents-type">>, <<"documents-bucket">>}, DocumentId), Image end, [], Docs).
riakc_pb_socket:modify_type(RiakPid, fun(Map) -> % UpdatedMap1 = riakc_map:update({<<"body">>, register}, fun(Register) -> riakc_register:set(<<" ">>, Register) end, Map), % UpdatedMap2 = riakc_map:update({<<"tags">>, set}, fun(Set) -> riakc_set:del_element(<<"Tag One">>, Set) end, UpdatedMap1), % 10 UpdatedMap3 = riakc_map:update({<<"smiles">>, counter}, fun(Counter) -> riakc_counter:increment(10, Counter) end, UpdatedMap2), UpdatedMap3 end, {<<"documents-type">>, <<"documents-bucket">>}, <<"DocumentKey">>, []). % riakc_pb_socket:search(RiakPid, <<"documents-index">>, <<"body_register:\"\"">>).
riakc_pb_socket:delete(RiakPid, {<<"documents-type">>, <<"documents-bucket">>}, <<"DocumentKey">>). % riakc_pb_socket:search(RiakPid, <<"documents-index">>, <<"body_register:\"\"">>).
Source: https://habr.com/ru/post/265399/