private static async Task CreateFormsRecognitionPipeline(SearchServiceClient searchClient, AppConfig appConfig, string modelId) { var formsSearchConfig = new SearchConfig { DataSourceName = "forms-datasource", IndexName = "forms-index", IndexerName = "forms-indexer", SkillsetName = "forms-skillset" }; var formsDataSource = await CognitiveSearchHelper.GetOrCreateBlobDataSource(searchClient, formsSearchConfig.DataSourceName, DataSourceType.AzureBlob, appConfig.BlobStorage); Console.WriteLine($"Successfully created data source {formsSearchConfig.DataSourceName}"); var formsIndex = await CognitiveSearchHelper.GetIndexFromFile(formsSearchConfig.IndexName); var formsIndexer = await CognitiveSearchHelper.GetIndexerFromFile(formsSearchConfig); var formsSkillset = await CognitiveSearchHelper.GetSkillsetFromFile(formsSearchConfig.SkillsetName, appConfig.CognitiveServices); Console.WriteLine("Adding Custom Form Recognizer skill to pipeline"); AddCustomFormRecognizerSkill(ref formsIndex, ref formsIndexer, ref formsSkillset, appConfig, modelId); await CognitiveSearchHelper.CreateCognitiveSearchPipeline(searchClient, appConfig.Search, formsIndex, formsIndexer, formsSkillset) .ContinueWith(t => { Console.WriteLine(t.IsFaulted ? t.Exception.Message : "Your forms recognizer pipeline was successfully created."); }); }
private static async Task CreateAnomalyDetectionPipeline(SearchServiceClient searchClient, AppConfig appConfig) { var searchConfig = new SearchConfig { DataSourceName = "telemetry-datasource", IndexName = "telemetry-index", IndexerName = "telemetry-indexer", SkillsetName = "telemetry-skillset" }; var dataSource = await CognitiveSearchHelper.GetOrCreateCosmosDataSource(searchClient, searchConfig.DataSourceName, DataSourceType.CosmosDb, appConfig.CosmosDb); Console.WriteLine($"Successfully created data source {searchConfig.DataSourceName}"); var index = await CognitiveSearchHelper.GetIndexFromFile(searchConfig.IndexName); var indexer = await CognitiveSearchHelper.GetIndexerFromFile(searchConfig); var skillset = new Skillset { Name = searchConfig.SkillsetName, Description = "Anomaly detection skills", CognitiveServices = new CognitiveServicesByKey(appConfig.CognitiveServices.Key, appConfig.CognitiveServices.ResourceId), Skills = new List <Skill>() }; Console.WriteLine("Adding Custom Anomaly Detector skill to pipeline"); AddCustomAnomalyDetectorSkill(ref index, ref indexer, ref skillset, appConfig); await CognitiveSearchHelper.CreateCognitiveSearchPipeline(searchClient, appConfig.Search, index, indexer, skillset) .ContinueWith(t => { Console.WriteLine(t.IsFaulted ? t.Exception.Message : "Your anomaly detection pipeline was successfully created."); }); Console.WriteLine(""); Console.WriteLine(""); }
static async Task Main(string[] args) { // Setup configuration to read from the appsettings.json file. var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); _configuration = builder.Build(); var appConfig = new AppConfig(); _configuration.Bind(appConfig); using (var searchClient = new SearchServiceClient(appConfig.Search.ServiceName, new SearchCredentials(appConfig.Search.Key))) { while (true) { Console.ResetColor(); Console.WriteLine("============="); Console.WriteLine("Choose an option below to run the PipelineEnhancer."); Console.WriteLine("** Enter 1 to add a Sentiment Analysis cognitive skill to the Tweets search index."); Console.WriteLine("** Enter 2 to add a knowledge store."); Console.WriteLine("** Enter 3 to create a new search pipeline for searching and recognizing forms in Blob Storage."); Console.WriteLine("** Enter 4 to create a new search pipeline for indexing vehicle telemetry and inspecting for engine temperature anomalies."); Console.WriteLine("** Enter X to exit the console application."); Console.WriteLine("============="); Console.WriteLine(""); var userInput = ""; while (true) { Console.Write("Enter the number of the operation you would like to perform > "); var input = Console.ReadLine().Trim(); if (input.Equals("1", StringComparison.InvariantCultureIgnoreCase) || input.Equals("2", StringComparison.InvariantCultureIgnoreCase) || input.Equals("3", StringComparison.InvariantCultureIgnoreCase) || input.Equals("4", StringComparison.InvariantCultureIgnoreCase) || input.Equals("X", StringComparison.InvariantCultureIgnoreCase)) { userInput = input; break; } else { Console.WriteLine("Invalid input entered. Please enter a number between 1 and 6, or X."); } } if (userInput.Equals("x", StringComparison.InvariantCultureIgnoreCase)) { break; } try { // Set the components back to their base objects, from JSON files var index = await CognitiveSearchHelper.GetIndexFromFile(appConfig.Search.IndexName); var indexer = await CognitiveSearchHelper.GetIndexerFromFile(appConfig.Search); var skillset = await CognitiveSearchHelper.GetSkillsetFromFile(appConfig.Search.SkillsetName, appConfig.CognitiveServices); var message = ""; Console.WriteLine(""); switch (userInput) { case "4": await CreateAnomalyDetectionPipeline(searchClient, appConfig); break; case "3": var modelId = await TrainFormRecognizerModel(appConfig.FormRecognizer, appConfig.BlobStorage); await CreateFormsRecognitionPipeline(searchClient, appConfig, modelId); break; case "2": AddKnowledgeStore(searchClient, appConfig, ref index, ref indexer, ref skillset); Console.WriteLine("Successfully added the knowledge store to the cognitive search pipeline."); break; case "1": AddSentimentAnalysisSkill(ref index, ref indexer, ref skillset); message = "The sentiment analysis skill was successfully added to the search pipeline."; await CognitiveSearchHelper.CreateCognitiveSearchPipeline(searchClient, appConfig.Search, index, indexer, skillset) .ContinueWith(t => { Console.WriteLine(t.IsFaulted ? t.Exception.Message : message); }); break; default: message = "Resetting the search pipeline to its initial state..."; await CognitiveSearchHelper.CreateCognitiveSearchPipeline(searchClient, appConfig.Search, index, indexer, skillset) .ContinueWith(t => { Console.WriteLine(t.IsFaulted ? t.Exception.Message : message); }); break; } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine(""); Console.WriteLine(""); } } }
static async Task Main(string[] args) { // Setup configuration to read from the appsettings.json file. var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); _configuration = builder.Build(); var appConfig = new AppConfig(); _configuration.Bind(appConfig); using (var searchClient = new SearchServiceClient(appConfig.Search.ServiceName, new SearchCredentials(appConfig.Search.Key))) { while (true) { Console.WriteLine("PipelineEnhancer creates and updates Cognitive Search pipelines."); Console.WriteLine("============="); Console.WriteLine("** Enter 1 to add a Sentiment Analysis cognitive skill to the Tweets search index."); //Console.WriteLine("** Enter 2 to include Personalized ranking information in the Tweets search index."); Console.WriteLine("** Enter 2 to integrate a custom text translator skill to the Tweets search index."); Console.WriteLine("** Enter 3 to create a new search pipeline for searching and recognizing forms in Blob Storage."); Console.WriteLine("** Enter 4 to create a new search pipeline for indexing vehicle telemetry and inspecting for engine temperature anomalies."); Console.WriteLine("============="); Console.WriteLine("** Enter X to exit the console application."); Console.WriteLine("============="); Console.WriteLine(""); var userInput = ""; while (true) { Console.Write("Enter the number of the operation you would like to perform > "); var input = Console.ReadLine(); if (input.Equals("1", StringComparison.InvariantCultureIgnoreCase) || input.Equals("2", StringComparison.InvariantCultureIgnoreCase) || input.Equals("3", StringComparison.InvariantCultureIgnoreCase) || input.Equals("4", StringComparison.InvariantCultureIgnoreCase) || //input.Equals("5", StringComparison.InvariantCultureIgnoreCase) || input.Equals("X", StringComparison.InvariantCultureIgnoreCase)) { userInput = input.Trim(); break; } else { Console.WriteLine("Invalid input entered. Please enter a number between 1 and 4, or X."); } } if (userInput.Equals("x", StringComparison.InvariantCultureIgnoreCase)) { break; } try { // Retrieve the components from the API, or create base objects if they don't exist. var index = await CognitiveSearchHelper.GetIndex(searchClient, appConfig.Search.IndexName); var indexer = await CognitiveSearchHelper.GetIndexer(searchClient, appConfig.Search); var skillset = await CognitiveSearchHelper.GetSkillset(searchClient, appConfig.Search.SkillsetName, appConfig.CognitiveServices); var message = ""; Console.WriteLine(""); switch (userInput) { case "4": await CreateAnomalyDetectionPipeline(searchClient, appConfig); continue; case "3": var modelId = await TrainFormRecognizerModel(appConfig.FormRecognizer, appConfig.BlobStorage); await CreateFormsRecognitionPipeline(searchClient, appConfig, modelId); continue; case "2": AddCustomTranslateSkill(ref index, ref indexer, ref skillset, appConfig.FunctionApp); Console.WriteLine("Your custom translator skill was successfully integrated to the search pipeline."); goto case "1"; case "1": AddSentimentAnalysisSkill(ref index, ref indexer, ref skillset); message = "The sentiment analysis skill was successfully added to the search pipeline."; await CognitiveSearchHelper.CreateCognitiveSearchPipeline(searchClient, appConfig.Search, index, indexer, skillset) .ContinueWith(t => { Console.WriteLine(t.IsFaulted ? t.Exception.Message : message); }); break; default: index = await CognitiveSearchHelper.GetIndexFromFile(appConfig.Search.IndexName); indexer = await CognitiveSearchHelper.GetIndexerFromFile(appConfig.Search); skillset = await CognitiveSearchHelper.GetSkillsetFromFile(appConfig.Search.SkillsetName, appConfig.CognitiveServices); message = "The search pipeline has been restored to its initial state"; await CognitiveSearchHelper.CreateCognitiveSearchPipeline(searchClient, appConfig.Search, index, indexer, skillset) .ContinueWith(t => { Console.WriteLine(t.IsFaulted ? t.Exception.Message : message); }); break; } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine(""); Console.WriteLine(""); } } }