@Override
    public Result search(Query query, Execution execution) {
        Result mergedResults = execution.search(query);

        var targets = getTargets(query.getModel().getSources(), query.properties());
        warnIfUnresolvedSearchChains(extractErrors(targets), mergedResults.hits());

        var prunedTargets = pruneTargetsWithoutDocumentTypes(query.getModel().getRestrict(), extractSpecs(targets));

        var regularTargetHandlers = resolveSearchChains(prunedTargets, execution.searchChainRegistry());
        query.errors().addAll(regularTargetHandlers.errors());

        Set<Target> targetHandlers = new LinkedHashSet<>(regularTargetHandlers.data());
        targetHandlers.addAll(getAdditionalTargets(query, execution, targetSelector));

        traceTargets(query, targetHandlers);

        if (targetHandlers.isEmpty())
            return mergedResults;
        else if (targetHandlers.size() > 1)
            search(query, execution, targetHandlers, mergedResults);
        else if (shouldExecuteTargetLongerThanThread(query, targetHandlers.iterator().next()))
            search(query, execution, targetHandlers, mergedResults); // one target, but search in separate thread
        else
            search(query, execution, first(targetHandlers), mergedResults); // search in this thread
        return mergedResults;
    }
@Test
    void require_that_hits_are_not_automatically_filled() {
        Result result = federationToSingleAddHitSearcher().search();
        assertNotFilled(firstHitInFirstGroup(result));
    }