@Override
    protected Object sendSearchRequest(Query query, Object unusedContext) throws IOException {
        this.query = query;
        invokers.forEach(invoker -> invoker.setMonitor(this));

        int originalHits = query.getHits();
        int originalOffset = query.getOffset();
        int neededHits = originalHits + originalOffset;
        int q = neededHits;
        if (group.isBalanced() && !group.isSparse()) {
            Double topkProbabilityOverrride = query.properties().getDouble(Dispatcher.topKProbability);
            q = (topkProbabilityOverrride != null)
                    ? estimateHitsToFetch(neededHits, invokers.size(), topkProbabilityOverrride)
                    : estimateHitsToFetch(neededHits, invokers.size());
        }
        if (q < neededHits) {
            query.trace("Only fetching " + q + " of " + neededHits + " hits per node (TopK probability for " + invokers.size() + " nodes)", 1);
        }
        query.setHits(q);
        query.setOffset(0);

        Object context = null;
        for (SearchInvoker invoker : invokers) {
            context = invoker.sendSearchRequest(query, context);
        }
        timeoutHandler = createTimeoutHandler(dispatchConfig, invokers.size(), query);

        query.setHits(originalHits);
        query.setOffset(originalOffset);
        return null;
    }
Sends search queries to the contained {@link SearchInvoker} sub-invokers. If the search
query has an offset other than zero, it will be reset to zero and the expected hit amount
will be adjusted accordingly.
container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java