docs: private void distributedProcessMissingKey(ResponseBuilder rb,
        ComponentFields mtasFields) throws IOException {
      HashMap<String, HashMap<String, HashSet<String>>> missingTermvectorKeys = computeMissingTermvectorItemsPerShard(
          rb.finished, "mtas", NAME);
      for (Entry<String, HashMap<String, HashSet<String>>> entry : missingTermvectorKeys
          .entrySet()) {
        HashMap<String, HashSet<String>> missingTermvectorKeysShard = entry
            .getValue();
        ModifiableSolrParams paramsNewRequest = new ModifiableSolrParams();
        int termvectorCounter = 0;
        for (String field : mtasFields.list.keySet()) {
          List<ComponentTermVector> tvList = mtasFields.list
              .get(field).termVectorList;
          if (tvList != null) {
            for (ComponentTermVector tv : tvList) {
              if (!tv.full) {
                if (missingTermvectorKeysShard.containsKey(tv.key)) {
                  HashSet<String> list = missingTermvectorKeysShard.get(tv.key);
                  if (!list.isEmpty()) {
                    paramsNewRequest.add(PARAM_MTAS_TERMVECTOR + "."
                        + termvectorCounter + "." + NAME_MTAS_TERMVECTOR_FIELD,
                        field);
                    paramsNewRequest.add(PARAM_MTAS_TERMVECTOR + "."
                        + termvectorCounter + "." + NAME_MTAS_TERMVECTOR_PREFIX,
                        tv.prefix);
                    paramsNewRequest.add(PARAM_MTAS_TERMVECTOR + "."
                        + termvectorCounter + "." + NAME_MTAS_TERMVECTOR_KEY,
                        tv.key);
                    if (tv.subComponentFunction.type != null) {
                      paramsNewRequest.add(
                          PARAM_MTAS_TERMVECTOR + "." + termvectorCounter + "."
                              + NAME_MTAS_TERMVECTOR_TYPE,
                          tv.subComponentFunction.type);
                    }
                    if (tv.distances != null) {
                      int distanceCounter = 0;
                      for (SubComponentDistance distance : tv.distances) {
                        paramsNewRequest.add(
                            PARAM_MTAS_TERMVECTOR + "." + termvectorCounter + "."
                                + NAME_MTAS_TERMVECTOR_DISTANCE + "."
                                + distanceCounter + "."
                                + NAME_MTAS_TERMVECTOR_DISTANCE_TYPE,
                            distance.type);
                        paramsNewRequest.add(
                            PARAM_MTAS_TERMVECTOR + "." + termvectorCounter + "."
                                + NAME_MTAS_TERMVECTOR_DISTANCE + "."
                                + distanceCounter + "."
                                + NAME_MTAS_TERMVECTOR_DISTANCE_BASE,
                            distance.base);
                        if (distance.key != null) {
                          paramsNewRequest.add(
                              PARAM_MTAS_TERMVECTOR + "." + termvectorCounter
                                  + "." + NAME_MTAS_TERMVECTOR_DISTANCE + "."
                                  + distanceCounter + "."
                                  + NAME_MTAS_TERMVECTOR_DISTANCE_KEY,
                              distance.key);
                        }
                        if (distance.minimum != null) {
                          paramsNewRequest.add(
                              PARAM_MTAS_TERMVECTOR + "." + termvectorCounter
                                  + "." + NAME_MTAS_TERMVECTOR_DISTANCE + "."
                                  + distanceCounter + "."
                                  + NAME_MTAS_TERMVECTOR_DISTANCE_MINIMUM,
                              String.valueOf(distance.minimum));
                        }
                        if (distance.maximum != null) {
                          paramsNewRequest.add(
                              PARAM_MTAS_TERMVECTOR + "." + termvectorCounter
                                  + "." + NAME_MTAS_TERMVECTOR_DISTANCE + "."
                                  + distanceCounter + "."
                                  + NAME_MTAS_TERMVECTOR_DISTANCE_MAXIMUM,
                              String.valueOf(distance.maximum));
                        }
                        if (distance.parameters != null) {
                          for (Entry<String, String> parameter : distance.parameters
                              .entrySet()) {
                            paramsNewRequest.add(
                                PARAM_MTAS_TERMVECTOR + "." + termvectorCounter
                                    + "." + NAME_MTAS_TERMVECTOR_DISTANCE + "."
                                    + distanceCounter + "."
                                    + NAME_MTAS_TERMVECTOR_DISTANCE_PARAMETER
                                    + "." + parameter.getKey(),
                                parameter.getValue());
                          }
                        }
                        distanceCounter++;
                      }
                    }
                    if (tv.functions != null) {
                      int functionCounter = 0;
                      for (SubComponentFunction function : tv.functions) {
                        paramsNewRequest.add(
                            PARAM_MTAS_TERMVECTOR + "." + termvectorCounter + "."
                                + NAME_MTAS_TERMVECTOR_FUNCTION + "."
                                + functionCounter + "."
                                + NAME_MTAS_TERMVECTOR_FUNCTION_EXPRESSION,
                            function.expression);
                        paramsNewRequest.add(
                            PARAM_MTAS_TERMVECTOR + "." + termvectorCounter + "."
                                + NAME_MTAS_TERMVECTOR_FUNCTION + "."
                                + functionCounter + "."
                                + NAME_MTAS_TERMVECTOR_FUNCTION_KEY,
                            function.key);
                        if (function.type != null) {
                          paramsNewRequest.add(
                              PARAM_MTAS_TERMVECTOR + "." + termvectorCounter
                                  + "." + NAME_MTAS_TERMVECTOR_FUNCTION + "."
                                  + functionCounter + "."
                                  + NAME_MTAS_TERMVECTOR_FUNCTION_TYPE,
                              function.type);
                        }
                        functionCounter++;
                      }
                    }
                    if (tv.regexp != null) {
                      paramsNewRequest.add(PARAM_MTAS_TERMVECTOR + "."
                          + termvectorCounter + "." + NAME_MTAS_TERMVECTOR_REGEXP,
                          tv.regexp);
                    }
                    if (!list.isEmpty()) {
                      StringBuilder listValue = new StringBuilder();
                      String[] listList = list.toArray(new String[list.size()]);
                      for (int i = 0; i < listList.length; i++) {
                        if (i > 0) {
                          listValue.append(",");
                        }
                        listValue.append(listList[i].replace("\\", "\\\\")
                            .replace(",", "\\\\"));
                      }
                      paramsNewRequest.add(PARAM_MTAS_TERMVECTOR + "."
                          + termvectorCounter + "." + NAME_MTAS_TERMVECTOR_FULL,
                          "false");
                      paramsNewRequest
                          .add(
                              PARAM_MTAS_TERMVECTOR + "." + termvectorCounter
                                  + "." + NAME_MTAS_TERMVECTOR_LIST,
                              listValue.toString());
                    }
                    termvectorCounter++;
                  }
                }
              }
            }
            if (termvectorCounter > 0) {
              ShardRequest nsreq = new ShardRequest();
              nsreq.shards = new String[] { entry.getKey() };
              nsreq.purpose = ShardRequest.PURPOSE_PRIVATE;
              nsreq.params = new ModifiableSolrParams();
              nsreq.params.add(CommonParams.FQ,
                  rb.req.getParams().getParams(CommonParams.FQ));
              nsreq.params.add(CommonParams.Q,
                  rb.req.getParams().getParams(CommonParams.Q));
              nsreq.params.add(CommonParams.CACHE,
                  rb.req.getParams().getParams(CommonParams.CACHE));
              nsreq.params.add(CommonParams.ROWS, "0");
              nsreq.params.add(MtasSolrSearchComponent.PARAM_MTAS,
                  rb.req.getOriginalParams()
                      .getParams(MtasSolrSearchComponent.PARAM_MTAS));
              nsreq.params.add(PARAM_MTAS_TERMVECTOR,
                  rb.req.getOriginalParams().getParams(PARAM_MTAS_TERMVECTOR));
              nsreq.params.add(paramsNewRequest);
              rb.addRequest(searchComponent, nsreq);
            }
          }
        }
      }
    }