/// <summary> Constructor for a new instance of the Text_Search_ItemViewer class, which allows the full text of an /// individual resource to be searched and individual matching pages are displayed with page thumbnails </summary> /// <param name="BriefItem"> Digital resource object </param> /// <param name="CurrentUser"> Current user, who may or may not be logged on </param> /// <param name="CurrentRequest"> Information about the current request </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param> public Text_Search_ItemViewer(BriefItemInfo BriefItem, User_Object CurrentUser, Navigation_Object CurrentRequest, Custom_Tracer Tracer) { Tracer.Add_Trace("Text_Search_ItemViewer.Constructor"); // Save the arguments for use later this.BriefItem = BriefItem; this.CurrentUser = CurrentUser; this.CurrentRequest = CurrentRequest; // Set the behavior properties to the empy behaviors ( in the base class ) Behaviors = EmptyBehaviors; if (!String.IsNullOrWhiteSpace(CurrentRequest.Text_Search)) { List <string> terms = new List <string>(); List <string> web_fields = new List <string>(); // Split the terms correctly SobekCM_Assistant.Split_Clean_Search_Terms_Fields(CurrentRequest.Text_Search, "ZZ", Search_Type_Enum.Basic, terms, web_fields, null, Search_Precision_Type_Enum.Contains, '|'); Tracer.Add_Trace("Text_Search_ItemViewer.Constructor", "Performing Solr/Lucene search"); int page = CurrentRequest.SubPage.HasValue ? Math.Max(CurrentRequest.SubPage.Value, ((ushort)1)) : 1; // Search differently, depending on the search type if (UI_ApplicationCache_Gateway.Settings.System.Search_System == Search_System_Enum.Beta) { results = v5_Solr_Searcher.Search_Within_Document(BriefItem.BibID, BriefItem.VID, terms, 20, page, false); } else { results = Legacy_Solr_Searcher.Search_Within_Document(BriefItem.BibID, BriefItem.VID, terms, 20, page, false); } Tracer.Add_Trace("Text_Search_ItemViewer.Constructor", "Completed Solr/Lucene search in " + results.QueryTime + "ms"); } }
/// <summary> Returns the textual explanation of the item-level search </summary> protected string Compute_Search_Explanation() { StringBuilder output = new StringBuilder(); // Split the parts List <string> terms = new List <string>(); List <string> fields = new List <string>(); // If this is basic, do some other preparation string complete_search = CurrentRequest.Text_Search; ushort subpage = CurrentRequest.SubPage.HasValue ? Math.Max(CurrentRequest.SubPage.Value, ((ushort)1)) : ((ushort)1); CurrentRequest.SubPage = 1; Legacy_Solr_Searcher.Split_Multi_Terms(CurrentRequest.Text_Search, "ZZ", terms, fields); string your_search_language = "Your search within this document for "; string and_not_language = " AND NOT "; string and_language = " AND "; string or_language = " OR "; string not_language = "not "; string resulted_in_language = " resulted in "; string matching_pages_language = " matching pages"; string no_matches_language = "no matching pages"; string expand_language = "You can expand your results by searching for"; string restrict_language = "You can restrict your results by searching for"; if (CurrentRequest.Language == Web_Language_Enum.French) { your_search_language = "Votre recherche dans les textes intégrals pour les pages contenant "; and_not_language = " ET PAS "; and_language = " ET "; or_language = " OU "; not_language = "pas "; resulted_in_language = " corresponde a "; matching_pages_language = " pages de résultats"; no_matches_language = "pas pages de résultats"; expand_language = "Vous pouvez elaborer votre rechereche en cherchant par"; restrict_language = "Vous pouvez limiter votre rechereche en cherchant par"; } if (CurrentRequest.Language == Web_Language_Enum.Spanish) { your_search_language = "Su búsqueda dentro de el texto completo por paginas conteniendo "; and_not_language = " Y NO "; and_language = " Y "; or_language = " O "; not_language = "no "; resulted_in_language = " resulto en "; matching_pages_language = " paginas correspondientes"; no_matches_language = "no paginas correspondientes"; expand_language = "Usted puede ampliar sus resultados buscando por"; restrict_language = "Usted puede disminuir sus resultados buscando por"; } output.Append(your_search_language); bool first = true; bool allOr = true; bool allAnd = true; StringBuilder allAndBldr = new StringBuilder(1000); StringBuilder allOrBldr = new StringBuilder(1000); StringBuilder allAndURL = new StringBuilder(1000); StringBuilder allOrURL = new StringBuilder(1000); for (int i = 0; i < terms.Count; i++) { string thisTerm = terms[i]; if (!first) { switch (fields[i][0]) { case '-': allOr = false; allAnd = false; output.Append(and_not_language); allAndBldr.Append(and_not_language); allAndURL.Append("+-"); break; case '=': output.Append(or_language); allAndBldr.Append(and_language); allOrBldr.Append(or_language); allAnd = false; allAndURL.Append("+"); allOrURL.Append("+="); break; default: output.Append(and_language); allAndBldr.Append(and_language); allOrBldr.Append(or_language); allOr = false; allAndURL.Append("+"); allOrURL.Append("+="); break; } } else { first = false; if (fields[i][0] == '-') { output.Append(not_language); allAndURL.Append("-"); } } // Write the term if (thisTerm[0] == '"') { CurrentRequest.Text_Search = thisTerm; output.Append("<a href=\"" + UrlWriterHelper.Redirect_URL(CurrentRequest) + "\">" + thisTerm.Replace("+", " ") + "</a>"); if (fields[i][0] == '-') { allAndBldr.Append(thisTerm.Replace("+", " ")); allAndURL.Append(thisTerm.Replace("\"", "%22")); } else { allAndBldr.Append(thisTerm.Replace("+", " ")); allAndURL.Append(thisTerm.Replace("\"", "%22")); allOrBldr.Append(thisTerm.Replace("+", " ")); allOrURL.Append(thisTerm.Replace("\"", "%22")); } } else { CurrentRequest.Text_Search = thisTerm; output.Append("<a href=\"" + UrlWriterHelper.Redirect_URL(CurrentRequest) + "\">'" + thisTerm + "'</a>"); if (fields[i][0] == '-') { allAndBldr.Append(thisTerm.Replace("+", " ")); allAndURL.Append(thisTerm.Replace("\"", "%22")); } else { allAndBldr.Append(thisTerm.Replace("+", " ")); allAndURL.Append(thisTerm.Replace("\"", "%22")); allOrBldr.Append(thisTerm.Replace("+", " ")); allOrURL.Append(thisTerm.Replace("\"", "%22")); } } } output.Append(resulted_in_language); if (results.TotalResults > 0) { output.AppendLine(number_to_string(results.TotalResults) + matching_pages_language + "."); } else { output.AppendLine("<b>" + no_matches_language + "</b>."); } if (!allOr) { CurrentRequest.Text_Search = allOrURL.ToString(); output.AppendLine("<br /><br />" + expand_language + " <a href=\"" + UrlWriterHelper.Redirect_URL(CurrentRequest) + "\">" + allOrBldr + "</a>."); } if ((!allAnd) && (results.TotalResults > 0)) { CurrentRequest.Text_Search = allAndURL.ToString(); output.AppendLine("<br /><br />" + restrict_language + " <a href=\"" + UrlWriterHelper.Redirect_URL(CurrentRequest) + "\">" + allAndBldr + "</a>."); } // Restore the original values CurrentRequest.Text_Search = complete_search; CurrentRequest.SubPage = subpage; return(output.ToString()); }