public Task <ElasticResponse> SearchAsync(SearchRequest searchRequest, CancellationToken cancellationToken)
        {
            var formatter = new SearchRequestFormatter(connection, mapping, searchRequest);

            return(retryPolicy.ExecuteAsync(
                       async token => await connection.SearchAsync(
                           formatter.Body,
                           searchRequest,
                           token,
                           log),
                       (response, exception) => !cancellationToken.IsCancellationRequested && exception != null,
                       (response, additionalInfo) =>
            {
                additionalInfo["index"] = connection.Index;
                additionalInfo["uri"] = connection.GetSearchUri(searchRequest);
                additionalInfo["query"] = formatter.Body;
            }, cancellationToken));
        }