Esempio n. 1
0
 public AlgoliaSearchApplianceService(IAlgoliaSearchHelper algoliaSearchHelper, IAlgoliaSearchConfig algoliaSearchConfig, ISearchIndexEntryHelper searchIndexEntryHelper, ILogger logger)
 {
     _algoliaSearchHelper    = algoliaSearchHelper;
     _algoliaSearchConfig    = algoliaSearchConfig;
     _searchIndexEntryHelper = searchIndexEntryHelper;
     _logger = logger;
 }
Esempio n. 2
0
        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);
                }
            }
        }