See Searcher for the methods that you can use on this object. A MultiSearcher is used to search multiple sub-searchers. The most efficient way to do this would be to open up an IndexReader on multiple directories and creating a Searcher with that. However, if you decide to implement a RemoteSearcher, the MultiSearcher can be used to search multiple machines at once.
Create a new MultiSearcher by passing a list of subsearchers to the constructor.
static VALUE frb_ms_init(int argc, VALUE *argv, VALUE self) { int i, j, top = 0, capa = argc; VALUE rsearcher; Searcher **searchers = ALLOC_N(Searcher *, capa); Searcher *s; for (i = 0; i < argc; i++) { rsearcher = argv[i]; switch (TYPE(rsearcher)) { case T_ARRAY: capa += RARRAY_LEN(rsearcher); REALLOC_N(searchers, Searcher *, capa); for (j = 0; j < RARRAY_LEN(rsearcher); j++) { VALUE rs = RARRAY_PTR(rsearcher)[j]; Data_Get_Struct(rs, Searcher, s); searchers[top++] = s; } break; case T_DATA: Data_Get_Struct(rsearcher, Searcher, s); searchers[top++] = s; break; default: rb_raise(rb_eArgError, "Can't add class %s to MultiSearcher", rb_obj_classname(rsearcher)); break; } } s = msea_new(searchers, top, false); Frt_Wrap_Struct(self, &frb_ms_mark, &frb_ms_free, s); object_add(s, self); return self; }