Beispiel #1
0
        /// <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");
            }
        }
Beispiel #2
0
        /// <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());
        }