anchor.diff:  %% @hidden
   query_product3({Products, Cont}, '_') ->
   	{Cont, Products};
  -query_product3({Products, Cont}, {like, String}) when is_list(String) ->
  +query_product3({Products, Cont}, {Op, String})
  +		when is_list(String), ((Op == exact) orelse (Op == like)) ->
   	F1 = case lists:last(String) of
  -		$% ->
  +		$% when Op == like ->
   			Prefix = list_to_binary(lists:droplast(String)),
   			Size = size(Prefix),
   			F2 = fun(<<P:Size/binary, _/binary>>) when P == Prefix ->
  
positive.code: query_bucket(Cont, '_' = _MatchId, MatchProduct) ->
  	MatchSpec = [{'_', [], ['$_']}],
  	query_bucket1(Cont, MatchSpec, MatchProduct);
  query_bucket(Cont, {like, Id}, MatchProduct) when is_list(Id) ->
  	MatchSpec = case lists:last(Id) of
  		$% ->
  			Prefix = lists:droplast(Id),
  			MatchHead = #bucket{id = Prefix ++ '_', _ = '_'},
  			[{MatchHead, [], ['$_']}];
  
negative.code: %% @hidden
  query_service2({Services, Cont}, '_') ->
  	{Cont, Services};
  query_service2({Services, Cont}, {Op, String})
  		when is_list(String), ((Op == exact) orelse (Op == like)) ->
  	F = case lists:last(String) of
  		$% when Op == like ->
  			Prefix = list_to_binary(lists:droplast(String)),
  			Size = size(Prefix),
  			fun(#service{name = Name}) ->
  