sig   type num = int32   val max_packet_size : int32   type status = Ok | Error | Retry | Warning   val show_status : Sphinx.status -> string   type matching =       MATCH_ALL     | MATCH_ANY     | MATCH_PHRASE     | MATCH_BOOLEAN     | MATCH_EXTENDED     | MATCH_FULLSCAN     | MATCH_EXTENDED2   val show_matching : Sphinx.matching -> string   type ranking =       RANK_PROXIMITY_BM25     | RANK_BM25     | RANK_NONE     | RANK_WORDCOUNT     | RANK_PROXIMITY     | RANK_MATCHANY     | RANK_FIELDMASK     | RANK_SPH04   val show_ranking : Sphinx.ranking -> string   type sort =       SORT_RELEVANCE     | SORT_ATTR_DESC     | SORT_ATTR_ASC     | SORT_TIME_SEGMENTS     | SORT_EXTENDED     | SORT_EXPR   val show_sort : Sphinx.sort -> string   type filter =       FILTER_VALUES of int64 array     | FILTER_RANGE of int64 * int64     | FILTER_FLOATRANGE of float * float   val show_filter : Sphinx.filter -> string   type attr1 =       ATTR_NONE     | ATTR_INTEGER     | ATTR_TIMESTAMP     | ATTR_ORDINAL     | ATTR_BOOL     | ATTR_FLOAT     | ATTR_BIGINT     | ATTR_STRING     | ATTR_WORDCOUNT   type attr_type = Sphinx.attr1 * bool   val show_attr_type : Sphinx.attr_type -> string   type attr_value =       F of float     | L of Sphinx.num     | Q of int64     | MVA of Sphinx.num array     | S of string   val show_attr : Sphinx.attr_value -> string   type grouping =       GROUPBY_DAY     | GROUPBY_WEEK     | GROUPBY_MONTH     | GROUPBY_YEAR     | GROUPBY_ATTR     | GROUPBY_ATTRPAIR   val show_grouping : Sphinx.grouping -> string   type query = {     mutable offset : int;     mutable limit : int;     mutable mode : Sphinx.matching;     mutable sort : Sphinx.sort;     mutable sortby : string;     mutable min_id : int64;     mutable max_id : int64;     mutable filters : (string * Sphinx.filter * bool) list;     mutable groupby : string;     mutable groupfunc : Sphinx.grouping;     mutable groupsort : string;     mutable groupdistinct : string;     mutable maxmatches : int;     mutable cutoff : int;     mutable retrycount : int;     mutable retrydelay : int;     mutable anchor : int list;     mutable indexweights : (string * int) list;     mutable ranker : Sphinx.ranking;     mutable maxquerytime : int;     mutable fieldweights : (string * int) list;     mutable overrides : int list;     mutable select : string;   }   type result = {     fields : string array;     attrs : string array;     matches : (int64 * int * Sphinx.attr_value array) array;     total : int;     total_found : int;     time : int;     words : (string * (int * int)) array;     warning : string option;   }   val default : unit -> Sphinx.query   exception Fail of string   val parse_sockaddr : string -> Unix.sockaddr   type conn = private Unix.file_descr   val connect : ?addr:Unix.sockaddr -> ?persist:bool -> unit -> Sphinx.conn   val close : Sphinx.conn -> unit   val set_limits :     Sphinx.query ->     ?maxmatches:int -> ?cutoff:int -> offset:int -> limit:int -> unit   val set_id_range : Sphinx.query -> int64 -> int64 -> unit   val add_filter : Sphinx.query -> string -> Sphinx.filter -> bool -> unit   val build_query :     Sphinx.query -> ?index:string -> ?comment:string -> string -> string   val run_queries :     Sphinx.conn ->     string list ->     [> `Err of string | `Ok of Sphinx.result ] list * string option   val query :     Sphinx.conn ->     Sphinx.query ->     ?index:string ->     ?comment:string -> string -> Sphinx.result * string option   val flush_attrs : Sphinx.conn -> int32   val update_attrs :     Sphinx.conn ->     string -> string list -> (int64 * int list) list -> int * string option end