@Override
    public void fill(Result result, String summaryClass, Execution execution) {
        Map<String, Result> summaryMap = new HashMap<>();
        for (Iterator<Hit> it = result.hits().unorderedDeepIterator(); it.hasNext(); ) {
            Hit hit = it.next();
            Result summaryResult = summaryMap.computeIfAbsent(extractSummaryClass(hit, summaryClass), key -> new Result(result.getQuery()));
            summaryResult.hits().add(hit);
        }
        Trace trace = result.getQuery().getTrace();
        if (trace.isTraceable(2)) {
            trace.trace("GroupingExecutor.fill(" + summaryClass + ") = {" + summaryMap.keySet() + "}", 2);
        }
        for (Map.Entry<String, Result> entry : summaryMap.entrySet()) {
            Result res = entry.getValue();
            execution.fill(res, entry.getKey());
            result.hits().addErrorsFrom(res.hits());
        }
        Result defaultResult = summaryMap.get(ExpressionConverter.DEFAULT_SUMMARY_NAME);
        if (defaultResult != null) {
            // the reason we need to do this fix is that the docsum packet protocol uses null summary class name to
            // signal that the backend should use its configured default, whereas for grouping it uses the literal
            // "default" to signal the same
            for (Hit hit : defaultResult.hits()) {
                hit.setFilled(null);
            }
        }
    }
Constructs a new instance of this searcher with the given component id.

@param componentId the identifier to assign to this searcher
container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java