/// <summary>
        /// Executes an asyncronus SearchQuery using the Search API and returns a list of generic pocos.
        /// https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_the_search_api.html
        /// </summary>
        /// <typeparam name="TPoco">Has to Implement the IElasticPoco interface</typeparam>
        /// <param name="searchQuery">SearchQuery object.</param>
        /// <returns>IEnumerable<TPoco></returns>
        public async Task <IEnumerable <TPoco> > ExecuteSearchAsync <TPoco>(IExecutableSearchQuery <TPoco> searchQuery)
            where TPoco : IElasticPoco
        {
            var query = searchQuery as SearchQuery <TPoco>;

            IndexExists(query.IndexName);

            return(ProcessSeachResponse <TPoco>(await LowLevelClient.SearchAsync <string>(query.IndexName, Generator.Generate(query))));
        }