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());
}
}