def search(query, params = {}, request_options = {})
      encoded_params = Hash[params.map { |k, v| [k.to_s, v.is_a?(Array) ? v.to_json : v] }]
      encoded_params[:query] = query
      client.post(Protocol.search_post_uri(name), { :params => Protocol.to_query(encoded_params) }.to_json, :search, request_options)
    end
def search(query, params = {}, request_options = {})
      encoded_params = Hash[params.map { |k, v| [k.to_s, v.is_a?(Array) ? v.to_json : v] }]
      encoded_params[:query] = query
      client.post(Protocol.search_post_uri(name), { :params => Protocol.to_query(encoded_params) }.to_json, :search, request_options)
    end
Search inside the index

 @param query the full text query
 @param args (optional) if set, contains an associative array with query parameters:
 - page: (integer) Pagination parameter used to select the page to retrieve.
                   Page is zero-based and defaults to 0. Thus, to retrieve the 10th page you need to set page=9
 - hitsPerPage: (integer) Pagination parameter used to select the number of hits per page. Defaults to 20.
 - attributesToRetrieve: a string that contains the list of object attributes you want to retrieve (let you minimize the answer size).
   Attributes are separated with a comma (for example "name,address").
   You can also use a string array encoding (for example ["name","address"]).
   By default, all attributes are retrieved. You can also use '*' to retrieve all values when an attributesToRetrieve setting is specified for your index.
 - attributesToHighlight: a string that contains the list of attributes you want to highlight according to the query.
   Attributes are separated by a comma. You can also use a string array encoding (for example ["name","address"]).
   If an attribute has no match for the query, the raw value is returned. By default all indexed text attributes are highlighted.
   You can use `*` if you want to highlight all textual attributes. Numerical attributes are not highlighted.
   A matchLevel is returned for each highlighted attribute and can contain:
      - full: if all the query terms were found in the attribute,
      - partial: if only some of the query terms were found,
      - none: if none of the query terms were found.
 - attributesToSnippet: a string that contains the list of attributes to snippet alongside the number of words to return (syntax is `attributeName:nbWords`).
    Attributes are separated by a comma (Example: attributesToSnippet=name:10,content:10).
    You can also use a string array encoding (Example: attributesToSnippet: ["name:10","content:10"]). By default no snippet is computed.
 - minWordSizefor1Typo: the minimum number of characters in a query word to accept one typo in this word. Defaults to 3.
 - minWordSizefor2Typos: the minimum number of characters in a query word to accept two typos in this word. Defaults to 7.
 - getRankingInfo: if set to 1, the result hits will contain ranking information in _rankingInfo attribute.
 - aroundLatLng: search for entries around a given latitude/longitude (specified as two floats separated by a comma).
   For example aroundLatLng=47.316669,5.016670).
   You can specify the maximum distance in meters with the aroundRadius parameter (in meters) and the precision for ranking with aroundPrecision
   (for example if you set aroundPrecision=100, two objects that are distant of less than 100m will be considered as identical for "geo" ranking parameter).
   At indexing, you should specify geoloc of an object with the _geoloc attribute (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}})
 - insideBoundingBox: search entries inside a given area defined by the two extreme points of a rectangle (defined by 4 floats: p1Lat,p1Lng,p2Lat,p2Lng).
   For example insideBoundingBox=47.3165,4.9665,47.3424,5.0201).
   At indexing, you should specify geoloc of an object with the _geoloc attribute (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}})
 - numericFilters: a string that contains the list of numeric filters you want to apply separated by a comma.
   The syntax of one filter is `attributeName` followed by `operand` followed by `value`. Supported operands are `<`, `<=`, `=`, `>` and `>=`.
   You can have multiple conditions on one attribute like for example numericFilters=price>100,price<1000.
   You can also use a string array encoding (for example numericFilters: ["price>100","price<1000"]).
 - tagFilters: filter the query by a set of tags. You can AND tags by separating them by commas.
   To OR tags, you must add parentheses. For example, tags=tag1,(tag2,tag3) means tag1 AND (tag2 OR tag3).
   You can also use a string array encoding, for example tagFilters: ["tag1",["tag2","tag3"]] means tag1 AND (tag2 OR tag3).
   At indexing, tags should be added in the _tags** attribute of objects (for example {"_tags":["tag1","tag2"]}).
 - facetFilters: filter the query by a list of facets.
   Facets are separated by commas and each facet is encoded as `attributeName:value`.
   For example: `facetFilters=category:Book,author:John%20Doe`.
   You can also use a string array encoding (for example `["category:Book","author:John%20Doe"]`).
 - facets: List of object attributes that you want to use for faceting.
   Attributes are separated with a comma (for example `"category,author"` ).
   You can also use a JSON string array encoding (for example ["category","author"]).
   Only attributes that have been added in **attributesForFaceting** index setting can be used in this parameter.
   You can also use `*` to perform faceting on all attributes specified in **attributesForFaceting**.
 - queryType: select how the query words are interpreted, it can be one of the following value:
    - prefixAll: all query words are interpreted as prefixes,
    - prefixLast: only the last word is interpreted as a prefix (default behavior),
    - prefixNone: no query word is interpreted as a prefix. This option is not recommended.
 - optionalWords: a string that contains the list of words that should be considered as optional when found in the query.
   The list of words is comma separated.
 - distinct: If set to 1, enable the distinct feature (disabled by default) if the attributeForDistinct index setting is set.
   This feature is similar to the SQL "distinct" keyword: when enabled in a query with the distinct=1 parameter,
   all hits containing a duplicate value for the attributeForDistinct attribute are removed from results.
   For example, if the chosen attribute is show_name and several hits have the same value for show_name, then only the best
   one is kept and others are removed.
 @param request_options contains extra parameters to send with your query