How to search objects using riak_search method

Ryan Zezeski rzezeski at basho.com
Sun Oct 28 14:20:29 EDT 2012


On Tue, Oct 9, 2012 at 7:49 AM, 郎咸武 <langxianzhe at gmail.com> wrote:
>
>
> ((ejabberd at meta)19> f(O),O=riakc_obj:new(<<"user1">>, <<"jason3">>,
> list_to_binary("[{\"name\":\"\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2\"},{\"sex\":\"male1\"}]"),
> "application/json").
> {riakc_obj,<<"user1">>,<<"jason3">>,undefined,[],
>            {dict,1,16,16,8,80,48,
>                  {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],...},
>
>  {{[],[],[],[],[],[],[],[],[],[],[[<<...>>|...]],[],[],...}}},
>
>  <<"[{\"name\":\"\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2\"},{\"sex\":\"male1\"}]">>}
>
> (ejabberd at meta)20> riakc_pb_socket:put(Pid, O).
> ok
>
> (ejabberd at meta)28>  riakc_pb_socket:search(Pid, <<"user1">>,
> list_to_binary("\"sex\":male1*")).      * The operation is ok.*
> {ok,{search_results,[{<<"user1">>,
>                       [{<<"id">>,<<"jason3">>},
>                        {<<"name">>,
>
> <<195,169,194,131,194,142,195,165,194,147,194,178>>},
>                        {<<"sex">>,<<"male1">>}]}],
>                     0.0,1}}
>


Notice the value of the name field in the result here.  It has been
properly converted to a UTF-8 sequence.  That is, at some point Riak Search
took your ASCII string of unicode escapes and converted it to a proper
unicode byte sequence.



> (ejabberd at meta)29>  riakc_pb_socket:search(Pid, <<"user1">>,
> list_to_binary("\"name\":\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2")).
>
> {ok,{search_results,[],0.0,0}}  *%% But there is empty. Why?*
>


First off, you are adding additional quotes around the name field.

11> list_to_binary("\"name\":\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2").
<<"\"name\":\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2">>

Second, you are searching for the ASCII string
"\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2".  At no point is this string
converted to a unicode sequence for you.  This is the correct behavior
because you might have ASCII documents containing unicode escapes.  You
need to query using a proper unicode binary.

19> riakc_pb_socket:search(Pid, <<"user1">>,
<<"name:",195,169,194,131,194,142,195,165,194,147,194,178>>).
{ok,{search_results,[{<<"user1">>,
                      [{<<"id">>,<<"jason3">>},
                       {<<"name">>,

<<195,169,194,131,194,142,195,165,194,147,194,178>>},
                       {<<"sex">>,<<"male1">>}]}],
                    0.35355299711227417,1}}


(ejabberd at meta)30>  riakc_pb_socket:search(Pid, <<"user1">>,
> list_to_binary("\"name\":\\u00e9\\u0083\\u008e\\u00e5\\u0093\\u00b2*")).
>
> {ok,{search_results,[],0.0,0}}  *%% There is empty,too. Why?*
>
>
20> riakc_pb_socket:search(Pid, <<"user1">>, <<"name:",195,169,"*">>).

{ok,{search_results,[{<<"user1">>,
                      [{<<"id">>,<<"jason3">>},
                       {<<"name">>,

<<195,169,194,131,194,142,195,165,194,147,194,178>>},
                       {<<"sex">>,<<"male1">>}]}],
                    0.0,1}}

-Z
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20121028/a9f93475/attachment.html>


More information about the riak-users mailing list