public IActionResult Get(string id) { var service = serviceQuery.Get(id); if (service == null) { return(new StatusCodeResult(StatusCodes.Status404NotFound)); } if (service.Type != (int)ServiceTypeEnum.Search) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.InvalidServiceTypeOnly_0_ServicesAreValidForThisRequest, "Search"))); } SearchActivateSettings activateSettings = null; SearchPrepareSettings prepareSettings = null; var searchSettingsElastic = serviceQuery.GetSettings <SearchSettingsWrapperElastic>(service.Id); if (searchSettingsElastic != null) { prepareSettings = searchSettingsElastic.ToSearchPrepareSettingsModel(); activateSettings = searchSettingsElastic.ToSearchActivateSettingsModel(); } var respService = service.ToServiceModel <SearchService>(); respService.ActualProcessId = service.ProcessIdList.FirstOrDefault(pid => GlobalStore.Processes.IsExist(pid)); respService.ActivateSettings = activateSettings; respService.PrepareSettings = prepareSettings; return(new OkObjectResult(respService)); }
public static SearchActivateSettings ToSearchActivateSettingsModel(this SearchSettingsWrapperElastic searchWrapper) { var model = new SearchActivateSettings { AutoCompleteSettings = searchWrapper.AutoCompleteSettings?.ToAutoCompleteSettingsModel(), ClassifierSettings = searchWrapper.ClassifierSettings?.ToClassifierSettingsModel(), SearchSettings = searchWrapper.SearchSettings?.ToSearchSettingsModel() }; return(model); }
public IActionResult Activate(string id, [FromBody] SearchActivateSettings searchActivateSettings) { //SERVICE VALIDATION var service = serviceQuery.Get(id); if (service == null) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status404NotFound, ServiceResources.InvalidIdNotExistingService)); } if (service.Type != (int)ServiceTypeEnum.Search) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.InvalidServiceTypeOnly_0_ServicesAreValidForThisRequest, "Search"))); } if (service.Status != (int)ServiceStatusEnum.Prepared) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, ServiceResources.InvalidStatusOnlyTheServicesWithPreparedStatusCanBeActivated)); } var searchSettings = serviceQuery.GetSettings <SearchSettingsWrapperElastic>(service.Id); if (searchActivateSettings != null) { if (searchActivateSettings.AutoCompleteSettings != null) { var validationResult = Validate(searchActivateSettings.AutoCompleteSettings); if (validationResult != null) { return(validationResult); } searchSettings.AutoCompleteSettings = searchActivateSettings.AutoCompleteSettings.ToAutoCompleteSettingsElastic(searchSettings.AutoCompleteSettings); } if (searchActivateSettings.ClassifierSettings != null) { var validationResult = Validate(searchActivateSettings.ClassifierSettings); if (validationResult != null) { return(validationResult); } searchSettings.ClassifierSettings = searchActivateSettings.ClassifierSettings.ToClassifierSearchSettingsElastic(searchSettings.ClassifierSettings); // there isn't default settings here at the prepare step so we have to set it up here if (searchSettings.ClassifierSettings?.Count == 0) { searchSettings.ClassifierSettings.Count = 3; } } if (searchActivateSettings.SearchSettings != null) { var validationResult = Validate(searchSettings.DataSetName, searchActivateSettings.SearchSettings); if (validationResult != null) { return(validationResult); } searchSettings.SearchSettings = searchActivateSettings.SearchSettings.ToSearchSettingsElastic(searchSettings.SearchSettings); } } service.Status = (int)ServiceStatusEnum.Active; var process = processHandler.Create( ProcessTypeEnum.SearchActivate, service.Id, searchSettings, string.Format(ServiceResources.Activating_0_Service_1, ServiceTypeEnum.Search, service.Name)); service.ProcessIdList.Add(process.Id); serviceQuery.Update(service.Id, service); serviceQuery.IndexSettings(searchSettings); processHandler.Start(process, (tokenSource) => searchHandler.Activate(process.Id, searchSettings, tokenSource.Token)); return(new HttpStatusCodeWithObjectResult(StatusCodes.Status202Accepted, process.ToProcessModel())); }
public IActionResult Prepare(string id, [FromBody] SearchPrepareSettings searchPrepareSettings) { //SERVICE VALIDATION var service = serviceQuery.Get(id); if (service == null) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status404NotFound, ServiceResources.InvalidIdNotExistingService)); } if (service.Type != (int)ServiceTypeEnum.Search) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.InvalidServiceTypeOnly_0_ServicesAreValidForThisRequest, "Search"))); } if (service.Status != (int)ServiceStatusEnum.New) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, ServiceResources.InvalidStatusOnlyTheServicesWithNewStatusCanBePrepared)); } //DATASET VALIDATION if (!GlobalStore.DataSets.IsExist(searchPrepareSettings.DataSetName)) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.DataSet_0_NotFound, searchPrepareSettings.DataSetName))); } var globalStoreDataSet = GlobalStore.DataSets.Get(searchPrepareSettings.DataSetName); var dataSet = globalStoreDataSet.DataSet; var serviceSettings = new SearchSettingsWrapperElastic { DataSetName = globalStoreDataSet.DataSet.Name, ServiceId = service.Id }; // SETUP default values for Activation - here we can calculate more accurate settings for the dataset var defaultActivationSettings = new SearchActivateSettings(); serviceSettings.AutoCompleteSettings = new AutoCompleteSettingsElastic { Confidence = 2.0, Count = 3, MaximumErrors = 0.5 }; serviceSettings.SearchSettings = new SearchSettingsElastic { Count = 3, CutOffFrequency = 0.001, Filter = null, Fuzziness = -1, ResponseFieldList = dataSet.InterpretedFields.Union(new List <string> { dataSet.IdField, dataSet.TagField }).ToList(), SearchFieldList = dataSet.InterpretedFields, Type = (int)SearchTypeEnum.Match, Weights = null, Operator = (int)LogicalOperatorEnum.OR, UseDefaultFilter = true, UseDefaultWeights = true, Order = null }; serviceQuery.IndexSettings(serviceSettings); var process = processHandler.Create( ProcessTypeEnum.SearchPrepare, service.Id, searchPrepareSettings, string.Format(ServiceResources.Preparing_0_Service_1, ServiceTypeEnum.Search, service.Name)); service.ProcessIdList.Add(process.Id); serviceQuery.Update(service.Id, service); processHandler.Start(process, (tokenSource) => searchHandler.Prepare(process.Id, serviceSettings, tokenSource.Token)); return(new HttpStatusCodeWithObjectResult(StatusCodes.Status202Accepted, process.ToProcessModel())); }