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; } }
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; } }
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);