/*
* 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;
}