@Override
    public Result doSearch2(String schema, Query query) {
        if (dispatcher.allGroupsHaveSize1())
            forceSinglePassGrouping(query);
        try (SearchInvoker invoker = getSearchInvoker(query)) {
            Result result = invoker.search(query);
            injectSource(result.hits());

            if (query.properties().getBoolean(Ranking.RANKFEATURES, false)) {
                // There is currently no correct choice for which
                // summary class we want to fetch at this point. If we
                // fetch the one selected by the user it may not
                // contain the data we need. If we fetch the default
                // one we end up fetching docsums twice unless the
                // user also requested the default one.
                fill(result, PartialSummaryHandler.resolveSummaryClass(result)); // ARGH
            }
            return result;
        } catch (TimeoutException e) {
            return new Result(query,ErrorMessage.createTimeout(e.getMessage()));
        } catch (IOException e) {
            Result result = new Result(query);
            if (query.getTrace().getLevel() >= 1)
                query.trace(getName() + " error response: " + result, false, 1);
            result.hits().addError(ErrorMessage.createBackendCommunicationError(getName() + " failed: "+ e.getMessage()));
            return result;
        }
    }
Creates a Fastsearcher.

@param dispatcher the dispatcher used (when enabled) to send summary requests over the rpc protocol.
                  Eventually we will move everything to this protocol and never use dispatch nodes.
                  At that point we won't need a cluster searcher above this to select and pass the right
                  backend.
@param clusterParams the cluster number, and other cluster backend parameters
container-search/src/main/java/com/yahoo/prelude/fastsearch/IndexedBackend.java