class Ferret::Search::MultiSearcher

Summary

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.

Public Class Methods

new(searcher*) → searcher click to toggle source

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