示例#1
0
        public static dynamic CollectionFields(AppSettings appSettings, DiscoveryRequest requestBody)
        {
            string  methodName = "CollectionFields";
            dynamic result     = new ExpandoObject();

            try
            {
                WatsonSettings   settings      = appSettings.WatsonServices.Discovery;
                IamAuthenticator authenticator = new IamAuthenticator(apikey: $"{requestBody.Apikey}");
                IBM.Watson.Discovery.v1.DiscoveryService discovery = new IBM.Watson.Discovery.v1.DiscoveryService($"{settings.Version}", authenticator);
                discovery.SetServiceUrl($"{requestBody.ApiUrl}");
                result = discovery.ListCollectionFields(requestBody.EnvironmentId, requestBody.CollectionId).Result;
                return(result);
            }
            catch (Exception e)
            {
                Log.Write(appSettings, LogEnum.ERROR.ToString(), label, className, methodName, $"ERROR: {JsonConvert.SerializeObject(requestBody)}");
                Log.Write(appSettings, LogEnum.ERROR.ToString(), label, className, methodName, $"ERROR: {e.Source + Environment.NewLine + e.Message + Environment.NewLine + e.StackTrace}");
                throw e;
            }
        }
示例#2
0
        public static dynamic QueryCollection(AppSettings appSettings, DiscoveryRequest requestBody)
        {
            string  methodName = "QueryCollection";
            dynamic result     = new ExpandoObject();

            try
            {
                WatsonSettings   settings      = appSettings.WatsonServices.Discovery;
                IamAuthenticator authenticator = new IamAuthenticator(apikey: $"{requestBody.Apikey}");
                IBM.Watson.Discovery.v1.DiscoveryService discovery = new IBM.Watson.Discovery.v1.DiscoveryService($"{settings.Version}", authenticator);
                discovery.SetServiceUrl($"{requestBody.ApiUrl}");

                string[] text = requestBody.Query.Split(":");

                result = discovery.Query(
                    environmentId: requestBody.EnvironmentId,
                    collectionId: requestBody.CollectionId,
                    filter: requestBody.Filter,
                    query: requestBody.Query,
                    naturalLanguageQuery: text[text.Length - 1],
                    aggregation: requestBody.Aggregation,
                    passages: requestBody.Passages ?? false,
                    passagesFields: requestBody.PassagesFields ?? "text",
                    passagesCount: requestBody.PassagesCount ?? 5,
                    highlight: requestBody.Highlight ?? false,
                    count: requestBody.Count ?? 5,
                    offset: requestBody.Offset ?? 0,
                    _return: requestBody._return
                    ).Result;

                if (requestBody.Highlight == true)
                {
                    ((IBM.Watson.Discovery.v1.Model.QueryResponse)result).Results.ForEach(x =>
                    {
                        if (x.AdditionalProperties["highlight"]["subtitle"] != null)
                        {
                            List <string> subtitles = x.AdditionalProperties["highlight"]["subtitle"].ToObject <List <string> >();
                            for (int i = 0; i < subtitles.Count; i++)
                            {
                                subtitles[i] = subtitles[i].Replace("<em>", "").Replace("</em>", "");
                                subtitles[i] = Regex.Replace(subtitles[i], @"[$][_][{].{1,2}[}][$]", "");
                            }
                            x.AdditionalProperties["highlight"]["subtitle"] = JToken.FromObject(subtitles);
                        }
                        if (x.AdditionalProperties["highlight"]["text"] != null)
                        {
                            List <string> texts = x.AdditionalProperties["highlight"]["text"].ToObject <List <string> >();
                            for (int i = 0; i < texts.Count; i++)
                            {
                                texts[i] = texts[i].Replace("<em>", "").Replace("</em>", "");
                                texts[i] = Regex.Replace(texts[i], @"[$][_][{].{1,2}[}][$]", "");
                            }
                            x.AdditionalProperties["highlight"]["text"] = JToken.FromObject(texts);
                        }
                        else
                        {
                            List <string> texts = new List <string>();
                            string txt          = x.AdditionalProperties["text"].ToString();
                            txt = Regex.Replace(txt, @"[$][_][{].{1,2}[}][$]", "");
                            texts.Add(txt);
                            x.AdditionalProperties["highlight"]["text"] = JToken.FromObject(texts);
                        }
                    });
                }

                return(result);
            }
            catch (Exception e)
            {
                Log.Write(appSettings, LogEnum.ERROR.ToString(), label, className, methodName, $"ERROR: {JsonConvert.SerializeObject(requestBody)}");
                Log.Write(appSettings, LogEnum.ERROR.ToString(), label, className, methodName, $"ERROR: {e.Source + Environment.NewLine + e.Message + Environment.NewLine + e.StackTrace}");
                throw e;
            }
        }
示例#3
0
        static void Main(string[] args)
        {
            // Add the environment and collection IDs here
            string environmentId = "{environment ID}";
            string collectionId  = "{collection ID}";
            string documentId    = "{doc ID if needed}";
            string version       = "{discovery version}";
            string inputQuery    = "blue and yellow purple houses";
            string metadata      = "{\"Creator\": \"Morgan Langlais\"}"; // for testing

            TokenOptions tokenOptions = new TokenOptions()
            {
                // Add your URL and API key here
                IamApiKey  = "{discovery api key}",
                ServiceUrl = "{discovery api url}"
            };

            // Add the Discovery version here
            DiscoveryService service = new DiscoveryService(tokenOptions, version);

            // List environments
            //Console.WriteLine("**********List Environments**********");
            //var envResult = service.ListEnvironments();
            //Console.WriteLine("My environments: " + envResult);
            //foreach (Environment environment in envResult.Result.Environments)
            //{
            //    if (environment._ReadOnly != true)
            //    {
            //        Console.WriteLine("Environment ID: " + environment.EnvironmentId);
            //    }
            //}


            // Query()
            // Add the query you would like to use here, i.e. "purple houses"
            //Console.WriteLine("**********Natural Language Query**********");
            //Console.WriteLine("Searching for " + inputQuery);
            //var queryResult = service.Query(
            //    environmentId,
            //    collectionId,
            //    naturalLanguageQuery: inputQuery
            //    );
            //string resultString = queryResult.Response;
            //Console.WriteLine("output: " + resultString);


            /*
             * Get all Document IDs from a collection
             */
            var getCollectionResponse = service.GetCollection(
                environmentId,
                collectionId
                );

            string collecResponse = getCollectionResponse.Response;
            // TO-DO: Deserialize instead of trimming the string
            int pFrom = collecResponse.IndexOf("available");

            string resultDocNum = collecResponse.Substring(pFrom, 20);

            resultDocNum = Regex.Replace(resultDocNum, "[^0-9]", "");

            // docsInCollection is the total number of documents in the collection
            int docsInCollection = Int32.Parse(resultDocNum);

            Console.WriteLine("The total number of documents in collection #" + collectionId + " is: " + docsInCollection);

            string allDocIds = "";

            // Will only work for collections of size 10000 or less
            // This gets a list of the document IDs
            var docidResult = service.Query(
                environmentId,
                collectionId,
                returnFields: "id",
                count: 10000
                );

            string docidString = docidResult.Response;

            var root = JsonConvert.DeserializeObject <Idreturn>(docidString);

            // allDocIds is a comma separated list of all document IDs in the collection
            allDocIds += string.Join(",", root.results.Select(item => item.id));

            string outputDir = @"./docIds.txt";

            System.IO.File.WriteAllText(outputDir, allDocIds);
            Console.WriteLine("All Document IDs have been placed in " + outputDir);