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);
        }
예제 #2
0
        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);
        }