    /*
     *  call-seq:
     *     Searcher.new(obj) -> Searcher
     *
     *  Create a new Searcher object. +dir+ can either be a string path to an
     *  index directory on the file-system, an actual Ferret::Store::Directory
     *  object or a Ferret::Index::IndexReader. You should use the IndexReader for
     *  searching multiple indexes. Just open the IndexReader on multiple
     *  directories.
     */
    static VALUE
    frt_sea_init(VALUE self, VALUE obj)
    {
        Store *store = NULL;
        IndexReader *ir = NULL;
        Searcher *sea;
        if (TYPE(obj) == T_STRING) {
            frt_create_dir(obj);
            store = open_fs_store(StringValueCStr(obj));
            ir = ir_open(store);
            DEREF(store);
            FRT_GET_IR(obj, ir);
        } else {
            Check_Type(obj, T_DATA);
            if (rb_obj_is_kind_of(obj, cDirectory) == Qtrue) {
                Data_Get_Struct(obj, Store, store);
                ir = ir_open(store);
                FRT_GET_IR(obj, ir);
            } else if (rb_obj_is_kind_of(obj, cIndexReader) == Qtrue) {
                Data_Get_Struct(obj, IndexReader, ir);
            } else {
                rb_raise(rb_eArgError, "Unknown type for argument to IndexSearcher.new");
            }
        }

        sea = isea_new(ir);
        ((IndexSearcher *)sea)->close_ir = false;
        Frt_Wrap_Struct(self, &frt_sea_mark, &frt_sea_free, sea);
        object_add(sea, self);

        return self;
    }