public void Initialize(ISearchIndex index, string indexName) { CloudSearchProviderSuggestionIndex searchProviderIndex = index as CloudSearchProviderSuggestionIndex; if (searchProviderIndex == null) { throw new NotSupportedException($"Only {typeof(CloudSearchProviderIndex).Name} is supported"); } ConnectionStringSettings connectionString1 = ConfigurationManager.ConnectionStrings[searchProviderIndex.ConnectionStringName]; if (connectionString1 == null) { throw new Sitecore.Exceptions.ConfigurationException($"The connection string for '{searchProviderIndex.ConnectionStringName}' is not provided."); } string[] strArray = connectionString1.ConnectionString.Split(new string[1] { "|" }, StringSplitOptions.RemoveEmptyEntries); IFactoryWrapper instance = _serviceCollectionClient.GetInstance <IFactoryWrapper>(); foreach (string connectionString2 in strArray) { try { ISearchService searchService = instance.CreateObject <ISearchService>("contentSearch/searchService", true); (searchService as ISearchIndexInitializable)?.Initialize(searchProviderIndex); var ssci = searchService as ISearchServiceConnectionInitializable; if (ssci != null) { if (indexName != null) { ssci.Initialize(indexName, connectionString2); } else { ssci.Initialize(searchProviderIndex.SearchCloudIndexName, connectionString2); } } if (searchService is ISearchServiceSchemaSyncNotification syncNotification) { syncNotification.SchemaSynced += new EventHandler(SearchServiceOnSchemaSynced); } _innerServices.Add(searchService); } catch (Exception ex) { SearchLog.Log.Info("Search service connection string initialization failed.", ex); } } if (!_innerServices.Any()) { throw new CloudSearchCompositeSearchServiceException("There is no search service available."); } Name = string.Join(";", _innerServices.Select(x => x.Name)); Schema = new CloudSearchIndexSchema(ExtractSchemaSnapshot()); }
private void SearchServiceOnSchemaSynced(object sender, EventArgs eventArgs) { Schema = new CloudSearchIndexSchema(ExtractSchemaSnapshot()); }