def msearch_template(self, body, index=None, params=None):
        """
        The /_search/template endpoint allows to use the mustache language to
        pre render search requests, before they are executed and fill existing
        templates with template parameters.
        `<http://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html>`_

        :arg body: The request definitions (metadata-search request definition
            pairs), separated by newlines
        :arg index: A list of index names, or a string containing a
            comma-separated list of index names, to use as the default
        :arg max_concurrent_searches: Controls the maximum number of concurrent
            searches the multi search api will execute
        :arg search_type: Search operation type, valid choices are:
            'query_then_fetch', 'query_and_fetch', 'dfs_query_then_fetch',
            'dfs_query_and_fetch'
        :arg typed_keys: Specify whether aggregation and suggester names should
            be prefixed by their respective types in the response
        """
        if body in SKIP_IN_PATH:
            raise ValueError("Empty value passed for a required argument 'body'.")
        return self.transport.perform_request(
            "GET",
            _make_path(index, "_msearch", "template"),
            params=params,
            body=self._bulk_body(body),
            headers={"content-type": "application/x-ndjson"},
        )