AngularAzureSearch.DataIndexer.Program.CreateAndSyncIndexer C# (CSharp) Method

CreateAndSyncIndexer() private static method

private static CreateAndSyncIndexer ( string dbConnectionString, string dataSourceName, string dataSourceDescription, string targetCollection, string indexName, string indexerName, string indexerDescription ) : void
dbConnectionString string
dataSourceName string
dataSourceDescription string
targetCollection string
indexName string
indexerName string
indexerDescription string
return void
        private static void CreateAndSyncIndexer(string dbConnectionString, string dataSourceName, string dataSourceDescription, string targetCollection, string indexName, string indexerName, string indexerDescription)
        {
            // Create a new indexer and sync it
            try
            {
                var creds = new DataSourceCredentials(dbConnectionString);
                DataSource ds = new DataSource(dataSourceName, DataSourceType.DocumentDb, creds, new DataContainer(targetCollection));
                ds.Description = dataSourceDescription;

                Indexer idx = new Indexer();
                idx.Name = indexerName;
                idx.Description = indexerDescription;
                idx.DataSourceName = dataSourceName;
                idx.TargetIndexName = indexName;
                idx.Parameters = new IndexingParameters();
                idx.Parameters.MaxFailedItems = 10;
                idx.Parameters.MaxFailedItemsPerBatch = 5;
                idx.Parameters.Base64EncodeKeys = false;

                //Delete indexer and datasource if it existed
                _searchClient.DataSources.Delete(dataSourceName);
                _searchClient.Indexers.Delete(indexerName);

                //Create indexer and datasource
                _searchClient.DataSources.Create(ds);
                _searchClient.Indexers.Create(idx);

                //Launch the sync and then monitor progress until complete
                AzureOperationResponse response = _searchClient.Indexers.Run(indexerName);
                IndexerGetStatusResponse statusResponse;
                bool running = true;

                Console.WriteLine("{0}", "Synchronization running...\n");
                while (running)
                {
                    statusResponse = _searchClient.Indexers.GetStatus(indexerName);
                    if (statusResponse.StatusCode != HttpStatusCode.OK)
                    {
                        Console.WriteLine("Error polling for indexer status.  Status Code: {0}", response.StatusCode.ToString());
                        return;
                    }

                    if (statusResponse.ExecutionInfo.LastResult != null)
                    {
                        switch (statusResponse.ExecutionInfo.LastResult.Status.ToString())
                        {
                            case "InProgress":
                                Console.WriteLine("{0}", "Synchronization running...\n");
                                Thread.Sleep(3000);
                                break;

                            case "Success":
                                running = false;
                                Console.WriteLine("Synchronized {0} rows...\n", statusResponse.ExecutionInfo.LastResult.ItemCount.ToString());
                                break;

                            default:
                                running = false;
                                Console.WriteLine("Synchronization failed: {0}\n", statusResponse.ExecutionInfo.LastResult.ErrorMessage.ToString());
                                break;
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine("Error creating indexer: {0}: \n", ex.Message.ToString());
            }
        }