public IActionResult GetByRecordAssociationFilter([FromQuery] string filter) { string entityAsJson = ""; List <POCO.RecordAssociationNamedEntity> namedEntities = new List <POCO.RecordAssociationNamedEntity>(); try { _logger.LogInformation("CPAPI: Get By Record Association Filter"); // Deserialize the ontology filter RecordAssociationFilter oFilter = new RecordAssociationFilter(); if (filter != null && filter.Length > 0) { _logger.LogDebug("Deserializing Record filter of length: " + filter.Length); string filterDecoded = System.Net.WebUtility.HtmlDecode(filter); filterDecoded = System.Net.WebUtility.UrlDecode(filterDecoded); oFilter = JsonConvert.DeserializeObject <RecordAssociationFilter>(filterDecoded); } // Check if a filter has been supplied if (oFilter.recordassociations.Count == 0) { // Nothing to filter by - return invalid filter return(StatusCode((int)System.Net.HttpStatusCode.NoContent)); } // TODO support multiple record assoc filters POCO.RecordAssociation recassoc = new POCO.RecordAssociation(); recassoc.RowKey = oFilter.recordassociations[0]; //CloudTable table = Utils.GetCloudTableNoCreate("stlprecordassociationnamedentity", _logger); //// Create a default query //TableQuery<NamedEntity> query = new TableQuery<NamedEntity>(); //string combinedFilter = ""; //if (oFilter.recordassociations.Count > 0) //{ // foreach (string rafilter in oFilter.recordassociations) // { // string cleanFilterPKey = Utils.CleanTableKey(rafilter); // string pkquery = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, cleanFilterPKey); // if (combinedFilter != "") // { // combinedFilter = TableQuery.CombineFilters(combinedFilter, TableOperators.Or, pkquery); // } // else // { // combinedFilter = pkquery; // } // } //} //// Create final combined query //query = new TableQuery<NamedEntity>().Where(combinedFilter); //List<NamedEntity> namedEntityEntities = new List<NamedEntity>(); //TableContinuationToken token = null; //var runningQuery = new TableQuery<NamedEntity>() //{ // FilterString = query.FilterString, // SelectColumns = query.SelectColumns //}; //do //{ // runningQuery.TakeCount = query.TakeCount - namedEntityEntities.Count; // Task<TableQuerySegment<NamedEntity>> tSeg = table.ExecuteQuerySegmentedAsync<NamedEntity>(runningQuery, token); // tSeg.Wait(); // token = tSeg.Result.ContinuationToken; // namedEntityEntities.AddRange(tSeg.Result); //} while (token != null && (query.TakeCount == null || namedEntityEntities.Count < query.TakeCount.Value) && namedEntityEntities.Count < 1000); //!ct.IsCancellationRequested && //// Return only distinct entrys //List<string> namedEntityKeys = new List<string>(); //foreach (NamedEntity ne in namedEntityEntities) //{ // if (!namedEntityKeys.Contains(ne.RowKey)) // { // // Add the entity to the output // // and the key // namedEntities.Add(ne); // namedEntityKeys.Add(ne.RowKey); // } //} namedEntities = DataFactory.RecordAssociation.GetNamedEntities(Utils.GetDataConfig(), recassoc); namedEntities.Sort((x, y) => String.Compare(x.RowKey, y.RowKey)); // Serialize entityAsJson = JsonConvert.SerializeObject(namedEntities, Formatting.Indented); } catch (Exception ex) { string exceptionMsg = "Named Entity GET BY RECORD FILTER exception: " + ex.Message; //log.Info("Exception occurred extracting text from uploaded file \r\nError: " + ex.Message); if (ex.InnerException != null) { exceptionMsg = exceptionMsg + "[" + ex.InnerException.Message + "]"; } _logger.LogError(exceptionMsg); return(StatusCode((int)System.Net.HttpStatusCode.InternalServerError)); } ObjectResult result = new ObjectResult(entityAsJson); return(result); }
public IActionResult GetByRecordAssociationFilter([FromQuery] string filter) { string entityAsJson = ""; List <string> keyPhrases = new List <string>(); try { _logger.LogInformation("CPAPI: Get By Record Filter"); // Deserialize the ontology filter KeyPhraseFilter oFilter = new KeyPhraseFilter(); if (filter != null && filter.Length > 0) { _logger.LogDebug("Deserializing filter of length: " + filter.Length); string filterDecoded = System.Net.WebUtility.HtmlDecode(filter); filterDecoded = System.Net.WebUtility.UrlDecode(filterDecoded); oFilter = JsonConvert.DeserializeObject <KeyPhraseFilter>(filterDecoded); } // TODO filters POCO.RecordAssociation filterRecAssoc = new POCO.RecordAssociation(); filterRecAssoc.RowKey = oFilter.recordassociations[0]; List <POCO.RecordAssociationKeyPhrase> kps = DataFactory.RecordAssociation.GetKeyPhrases(Utils.GetDataConfig(), filterRecAssoc); //// Get the table //CloudTable tRecordAssociationKeyphrases = Utils.GetCloudTable("stlprecordassociationkeyphrases", _logger); //// Create a default query //TableQuery <KeyPhraseEntity> query = new TableQuery<KeyPhraseEntity>(); ////string finalFilter = ""; //string recordAssociationFilter = ""; //string keyphraseFilter = ""; //string combinedFilter = ""; //// Add any record association filters //if (oFilter.recordassociations.Count > 0) //{ // foreach (string rif in oFilter.recordassociations) // { // string cleanFilterPKey = Utils.CleanTableKey(rif); // string pkquery = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, cleanFilterPKey); // if (recordAssociationFilter != "") // { // recordAssociationFilter = TableQuery.CombineFilters(recordAssociationFilter, TableOperators.Or, pkquery); // } // else // { // recordAssociationFilter = pkquery; // } // } //} //// Add any keyphrase filters //if (oFilter.keyphrases.Count>0) //{ // foreach (string rif in oFilter.keyphrases) // { // string cleanFilterRKey = Utils.CleanTableKey(rif); // string queryKeyPhrase = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, cleanFilterRKey); // if (keyphraseFilter != "") // { // keyphraseFilter = TableQuery.CombineFilters(keyphraseFilter, TableOperators.Or, queryKeyPhrase); // } // else // { // keyphraseFilter = queryKeyPhrase; // } // } //} //// Combine querys if needed //if (recordAssociationFilter.Length > 0) //{ // if (keyphraseFilter.Length > 0) // { // // Combine queries when both filters are set // combinedFilter = TableQuery.CombineFilters(recordAssociationFilter, TableOperators.And, keyphraseFilter); // } // else // { // combinedFilter = recordAssociationFilter; // } //} //else //{ // if (keyphraseFilter.Length>0) // { // combinedFilter = keyphraseFilter; // } //} //// Create final combined query //query = new TableQuery<KeyPhraseEntity>().Where(combinedFilter); //List<KeyPhraseEntity> keyphraseEntities = new List<KeyPhraseEntity>(); //TableContinuationToken token = null; //var runningQuery = new TableQuery<KeyPhraseEntity>() //{ // FilterString = query.FilterString, // SelectColumns = query.SelectColumns //}; //do //{ // runningQuery.TakeCount = query.TakeCount - keyphraseEntities.Count; // Task<TableQuerySegment<KeyPhraseEntity>> tSeg = tRecordAssociationKeyphrases.ExecuteQuerySegmentedAsync<KeyPhraseEntity>(runningQuery, token); // tSeg.Wait(); // token = tSeg.Result.ContinuationToken; // keyphraseEntities.AddRange(tSeg.Result); //} while (token != null && (query.TakeCount == null || keyphraseEntities.Count < query.TakeCount.Value) && keyphraseEntities.Count < 1000); //!ct.IsCancellationRequested && ////keyphraseEntities.Sort((x, y) => String.Compare(x.RowKey, y.RowKey)); // Return only distinct keyphrases foreach (POCO.RecordAssociationKeyPhrase kp in kps) { if (!keyPhrases.Contains(kp.RowKey)) { keyPhrases.Add(kp.RowKey); } } keyPhrases.Sort((x, y) => String.Compare(x, y)); // Serialize entityAsJson = JsonConvert.SerializeObject(keyPhrases, Formatting.Indented); } catch (Exception ex) { string exceptionMsg = "KeyPhrase GET exception: " + ex.Message; //log.Info("Exception occurred extracting text from uploaded file \r\nError: " + ex.Message); if (ex.InnerException != null) { exceptionMsg = exceptionMsg + "[" + ex.InnerException.Message + "]"; } _logger.LogError(exceptionMsg); return(StatusCode((int)System.Net.HttpStatusCode.InternalServerError)); } ObjectResult result = new ObjectResult(entityAsJson); return(result); }