    /*
     *  call-seq:
     *     SortField.new(field, options = {}) -> sort_field
     *
     *  Create a new SortField which can be used to sort the result-set by the
     *  value in field +field+.
     *
     *  === Options
     *
     *  :type::         Default: +:auto+. Specifies how a field should be sorted.
     *                  Choose from one of; +:auto+, +:integer+, +:float+,
     *                  +:string+, +:byte+, +:doc_id+ or +:score+. +:auto+ will
     *                  check the datatype of the field by trying to parse it into
     *                  either a number or a float before settling on a string
     *                  sort. String sort is locale dependent and works for
     *                  multibyte character sets like UTF-8 if you have your
     *                  locale set correctly.
     *  :reverse        Default: false. Set to true if you want to reverse the
     *                  sort.
     */
    static VALUE
    frt_sf_init(int argc, VALUE *argv, VALUE self)
    {
        SortField *sf;
        VALUE rfield, roptions;
        VALUE rval;
        int type = SORT_TYPE_AUTO;
        int is_reverse = false;
        char *field;

        if (rb_scan_args(argc, argv, "11", &rfield, &roptions) == 2) {
            if (Qnil != (rval = rb_hash_aref(roptions, sym_type))) {
                type = get_sort_type(rval);
            }
            if (Qnil != (rval = rb_hash_aref(roptions, sym_reverse))) {
                is_reverse = RTEST(rval);
            }
            if (Qnil != (rval = rb_hash_aref(roptions, sym_comparator))) {
                rb_raise(rb_eArgError, "Unsupported argument ':comparator'");
            }
        }
        if (NIL_P(rfield)) rb_raise(rb_eArgError, "must pass a valid field name");
        field = frt_field(rfield);

        sf = sort_field_new(field, type, is_reverse);
        if (sf->field == NULL && field) {
            sf->field = estrdup(field);
        }

        Frt_Wrap_Struct(self, NULL, &frt_sf_free, sf);
        object_add(sf, self);
        return self;
    }