コード例 #1
0
        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());
        }
コード例 #2
0
 private void SearchServiceOnSchemaSynced(object sender, EventArgs eventArgs)
 {
     Schema = new CloudSearchIndexSchema(ExtractSchemaSnapshot());
 }