public AlgoliaSearchApplianceService(IAlgoliaSearchHelper algoliaSearchHelper, IAlgoliaSearchConfig algoliaSearchConfig, ISearchIndexEntryHelper searchIndexEntryHelper, ILogger logger) { _algoliaSearchHelper = algoliaSearchHelper; _algoliaSearchConfig = algoliaSearchConfig; _searchIndexEntryHelper = searchIndexEntryHelper; _logger = logger; }
private async Task UpdateSearchAppliance(CancellationToken token, ICollection <ISearchIndexEntry> entries, ICollection <UpdateItemReference> updatedItems, IAlgoliaSearchConfig config) { if (token.IsCancellationRequested) { return; } var client = new SearchClient(config.ApplicationId, config.UpdateApiKey); var index = client.InitIndex(config.IndexName); if (token.IsCancellationRequested) { return; } // Make sure the settings match what we expect var settings = _algoliaSearchHelper.GetIndexSettings(); if (settings != null) { await index.WaitTaskAsync((await index.SetSettingsAsync(settings)).TaskID); } if (token.IsCancellationRequested) { return; } // Delete any existing entries (or more importantly previously removed children) for the items being inserted var filterItems = updatedItems.Select(i => i.IncludeDescendents ? $"path:{i.ContentUdi}" : $"objectID:{i.ContentUdi}"); var filters = string.Join(" OR ", filterItems); if (!string.IsNullOrWhiteSpace(filters)) { await index.WaitTaskAsync((await index.DeleteByAsync(new Query() { Filters = filters })).TaskID); if (token.IsCancellationRequested) { return; } } if (entries.Count > 0) { var responses = (await index.SaveObjectsAsync(entries)).Responses; foreach (var response in responses) { await index.WaitTaskAsync(response.TaskID); } } }