private async Task <int> DeleteDocuments(AzureSearchQuery query)
        {
            var defaultIndexName   = _azureSearchService.GetDefaultIndexName <T>();
            var documentsOlderThan = await _azureSearchService.SearchAsync <SearchDocument>(query, defaultIndexName);

            await _azureSearchService.DeleteAsync(documentsOlderThan.Results.Select(r => r.Document).ToArray(), defaultIndexName);

            return(documentsOlderThan.Results.Count);
        }
        public async Task <DocumentSearchResult <T> > SearchAsync <T>(AzureSearchQuery query, string indexName = null) where T : SearchDocument
        {
            var searchParameters = BuildSearchParameters(query);

            return(await _client
                   .Indexes
                   .GetClient(indexName ?? GetDefaultIndexName <T>())
                   .Documents
                   .SearchAsync <T>(query.SearchTerm + "*", searchParameters)
                   .ConfigureAwait(false));
        }
 private static SearchParameters BuildSearchParameters(AzureSearchQuery query)
 {
     return(new SearchParameters
     {
         Skip = query.Skip,
         Top = query.Top,
         HighlightFields = query.HighlightFields,
         HighlightPreTag = query.HighlightPreTag,
         HighlightPostTag = query.HighlightPostTag,
         Facets = query.Facets,
         Filter = query.Filter,
         IncludeTotalResultCount = true,
         ScoringProfile = query.ScoringProfile,
         OrderBy = query.OrderBy,
     });
 }
 public static IReadOnlyCollection <SearchResult <T> > SearchBatch <T>(this IAzureSearchService searchService, AzureSearchQuery query, string indexName = null, int batchSize = 1000) where T : SearchDocument
 {
     return(searchService.SearchBatchAsync <T>(query, indexName, batchSize).GetAwaiter().GetResult());
 }
        public static async Task <IReadOnlyCollection <SearchResult <T> > > SearchBatchAsync <T>(this IAzureSearchService searchService, AzureSearchQuery query, string indexName = null, int batchSize = 1000) where T : SearchDocument
        {
            var firstPart = await searchService.SearchAsync <T>(query, indexName).ConfigureAwait(false);

            var results = new List <SearchResult <T> >();

            results.AddRange(firstPart.Results);

            if (firstPart.Count <= batchSize)
            {
                return(results);
            }

            for (var i = 1; i *batchSize < firstPart.Count; i++)
            {
                var queryClone = (AzureSearchQuery)query.Clone();
                queryClone.Skip = i * batchSize + query.Skip;
                queryClone.Top  = batchSize;

                var nextPart = await searchService.SearchAsync <T>(queryClone, indexName)
                               .ConfigureAwait(false);

                results.AddRange(nextPart.Results);
            }

            return(results);
        }
 public DocumentSearchResult <T> Search <T>(AzureSearchQuery query, string indexName = null) where T : SearchDocument
 {
     return(SearchAsync <T>(query, indexName).GetAwaiter().GetResult());
 }