コード例 #1
0
        private void BindIndex()
        {
            IndexItemCollection searchResults = IndexHelper.Browse(
                siteSettings.SiteId,
                featureGuid,
                modifiedBeginDate,
                modifiedEndDate,
                pageNumber,
                pageSize,
                out totalHits);

            totalPages = 1;

            if (pageSize > 0)
            {
                totalPages = totalHits / pageSize;
            }

            if (totalHits <= pageSize)
            {
                totalPages = 1;
            }
            else
            {
                Math.DivRem(totalHits, pageSize, out int remainder);
                if (remainder > 0)
                {
                    totalPages += 1;
                }
            }

            string searchUrl = SiteRoot
                               + "/Admin/IndexBrowser.aspx?p={0}"
                               + "&amp;bd=" + modifiedBeginDate.Date.ToString("s")
                               + "&amp;ed=" + modifiedEndDate.Date.ToString("s")
                               + "&amp;f=" + featureGuid.ToString();

            pgrTop.PageURLFormat = searchUrl;
            pgrTop.ShowFirstLast = true;
            pgrTop.CurrentIndex  = pageNumber;
            pgrTop.PageSize      = pageSize;
            pgrTop.PageCount     = totalPages;
            pgrTop.Visible       = (totalPages > 1);

            pgrBottom.PageURLFormat = searchUrl;
            pgrBottom.ShowFirstLast = true;
            pgrBottom.CurrentIndex  = pageNumber;
            pgrBottom.PageSize      = pageSize;
            pgrBottom.PageCount     = totalPages;
            pgrBottom.Visible       = (totalPages > 1);

            if (searchResults.Count > 0 && searchResults.ItemCount > 0)
            {
                rptResults.Visible    = true;
                rptResults.DataSource = searchResults;
                rptResults.DataBind();
            }
        }
コード例 #2
0
        private void DoSearch()
        {
            if (Page.IsPostBack)
            {
                return;
            }

            if (Request.QueryString.Get("q") == null)
            {
                return;
            }

            SearchTerm = Request.QueryString.Get("q");

            if (SearchTerm.Length == 0)
            {
                return;
            }
            SearchTerm = SecurityHelper.SanitizeHtml(SearchTerm);

            pageNumber = WebUtils.ParseInt32FromQueryString("p", true, 1);

            // this is only to make sure its initialized
            // before indexing is queued on a topic
            // because there is no HttpContext on
            // external topics and httpcontext is needed to initilaize
            // once initialized its cached
            IndexBuilderProviderCollection
                indexProviders = IndexBuilderManager.Providers;

            queryErrorOccurred = false;

            IndexItemCollection searchResults = IndexHelper.Search(
                siteSettings.SiteId,
                isSiteEditor,
                GetUserRoles(),
                SearchTerm,
                WebConfigSettings.EnableSearchResultsHighlighting,
                WebConfigSettings.SearchResultsFragmentSize,
                pageNumber,
                pageSize,
                out totalHits,
                out queryErrorOccurred, featureGuids.ToArray());

            if (searchResults.Count == 0)
            {
                ShowNoResults();
                InitIndexIfNeeded();
                return;
            }

            int start = 1;

            if (pageNumber > 1)
            {
                start = ((pageNumber - 1) * pageSize) + 1;
            }

            int end = pageSize;

            if (start > 1)
            {
                end += start;
            }

            if (end > totalHits)
            {
                end = totalHits;
            }

            this.pnlSearchResults.Visible = true;
            this.pnlNoResults.Visible     = false;
            this.lblDuration.Visible      = true;
            this.lblSeconds.Visible       = true;

            this.lblFrom.Text      = (start).ToString();
            this.lblTo.Text        = end.ToString(CultureInfo.InvariantCulture);
            this.lblTotal.Text     = totalHits.ToString(CultureInfo.InvariantCulture);
            this.lblQueryText.Text = Server.HtmlEncode(SearchTerm);
            float duration = searchResults.ExecutionTime * 0.0000001F;

            this.lblDuration.Text = duration.ToString();
            divResults.Visible    = true;

            totalPages = 1;
            int pageLowerBound = (pageSize * pageNumber) - pageSize;

            if (pageSize > 0)
            {
                totalPages = totalHits / pageSize;
            }

            if (totalHits <= pageSize)
            {
                totalPages = 1;
            }
            else
            {
                int remainder;
                Math.DivRem(totalHits, pageSize, out remainder);
                if (remainder > 0)
                {
                    totalPages += 1;
                }
            }

            //totalPages always seems 1 more than it should be not sure why
            //if (totalPages > 1) { totalPages -= 1; }

            string searchUrl = String.Format("{0}/SearchResults.aspx?q={1}&amp;p={{0}}&amp;f={2}", SiteRoot, Server.UrlEncode(SearchTerm), arrayToStr(",", featureGuids));

            pgrTop.PageURLFormat = searchUrl;
            pgrTop.ShowFirstLast = true;
            pgrTop.CurrentIndex  = pageNumber;
            pgrTop.PageSize      = pageSize;
            pgrTop.PageCount     = totalPages;
            pgrTop.Visible       = (totalPages > 1);

            pgrBottom.PageURLFormat = searchUrl;
            pgrBottom.ShowFirstLast = true;
            pgrBottom.CurrentIndex  = pageNumber;
            pgrBottom.PageSize      = pageSize;
            pgrBottom.PageCount     = totalPages;
            pgrBottom.Visible       = (totalPages > 1);



            this.rptResults.DataSource = searchResults;
            this.rptResults.DataBind();
        }
コード例 #3
0
        private void RenderSearchResults(HttpContext context, IndexItemCollection searchResults)
        {
            context.Response.ContentType = "application/xml";
            Encoding encoding = new UTF8Encoding();

            context.Response.ContentEncoding = encoding;

            string sanitizedQuery = SecurityHelper.RemoveMarkup(query);

            using (XmlTextWriter xmlTextWriter = new XmlTextWriter(context.Response.OutputStream, encoding))
            {
                xmlTextWriter.Formatting = Formatting.Indented;

                xmlTextWriter.WriteStartDocument();

                xmlTextWriter.WriteStartElement("feed");
                xmlTextWriter.WriteAttributeString("xmlns", "http://www.w3.org/2005/Atom");
                xmlTextWriter.WriteAttributeString("xmlns:opensearch", "http://a9.com/-/spec/opensearch/1.1/");

                xmlTextWriter.WriteStartElement("title");
                xmlTextWriter.WriteValue(string.Format(CultureInfo.InvariantCulture, Resource.SearchTitleFormat, siteSettings.SiteName, sanitizedQuery));
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("link");
                xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.ashx?q=" + context.Server.UrlEncode(sanitizedQuery));
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("updated");
                xmlTextWriter.WriteValue(DateTime.UtcNow.ToString("u", CultureInfo.InvariantCulture).Replace(" ", "T"));
                xmlTextWriter.WriteEndElement();


                xmlTextWriter.WriteStartElement("author");

                xmlTextWriter.WriteStartElement("name");
                xmlTextWriter.WriteValue(siteSettings.CompanyName);
                xmlTextWriter.WriteEndElement();
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("id");
                xmlTextWriter.WriteValue("urn:uuid:" + siteSettings.SiteGuid.ToString());
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("opensearch:totalResults");
                xmlTextWriter.WriteValue(totalHits.ToString(CultureInfo.InvariantCulture));
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("opensearch:startIndex");
                xmlTextWriter.WriteValue(start.ToString(CultureInfo.InvariantCulture));
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("opensearch:itemsPerPage");
                xmlTextWriter.WriteValue(pageSize.ToString(CultureInfo.InvariantCulture));
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("opensearch:Query");
                xmlTextWriter.WriteAttributeString("role", "request");
                xmlTextWriter.WriteAttributeString("searchTerms", sanitizedQuery);
                xmlTextWriter.WriteAttributeString("startPage", "1");
                xmlTextWriter.WriteEndElement();

                //this is a link to the xhtml search page
                xmlTextWriter.WriteStartElement("link");
                xmlTextWriter.WriteAttributeString("rel", "alternate");
                xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.aspx?q="
                                                   + context.Server.UrlEncode(sanitizedQuery)
                                                   + "&p=" + pageNumber.ToString(CultureInfo.InvariantCulture));
                xmlTextWriter.WriteAttributeString("type", "text/html");
                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteStartElement("link");
                xmlTextWriter.WriteAttributeString("rel", "self");
                xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.ashx?q="
                                                   + context.Server.UrlEncode(sanitizedQuery)
                                                   + "&p=" + pageNumber.ToString(CultureInfo.InvariantCulture));
                xmlTextWriter.WriteAttributeString("type", "application/atom+xml");
                xmlTextWriter.WriteEndElement();

                if (totalPages > 1)
                {
                    xmlTextWriter.WriteStartElement("link");
                    xmlTextWriter.WriteAttributeString("rel", "first");
                    xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.ashx?q="
                                                       + context.Server.UrlEncode(sanitizedQuery)
                                                       + "&p=1");
                    xmlTextWriter.WriteAttributeString("type", "application/atom+xml");
                    xmlTextWriter.WriteEndElement();

                    if (pageNumber > 1)
                    {
                        xmlTextWriter.WriteStartElement("link");
                        xmlTextWriter.WriteAttributeString("rel", "previous");
                        xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.ashx?q="
                                                           + context.Server.UrlEncode(sanitizedQuery)
                                                           + "&p=" + (pageNumber - 1).ToString(CultureInfo.InvariantCulture));
                        xmlTextWriter.WriteAttributeString("type", "application/atom+xml");
                        xmlTextWriter.WriteEndElement();
                    }

                    if (pageNumber < totalPages)
                    {
                        xmlTextWriter.WriteStartElement("link");
                        xmlTextWriter.WriteAttributeString("rel", "next");
                        xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.ashx?q="
                                                           + context.Server.UrlEncode(sanitizedQuery)
                                                           + "&p=" + (pageNumber + 1).ToString(CultureInfo.InvariantCulture));
                        xmlTextWriter.WriteAttributeString("type", "application/atom+xml");
                        xmlTextWriter.WriteEndElement();
                    }

                    xmlTextWriter.WriteStartElement("link");
                    xmlTextWriter.WriteAttributeString("rel", "last");
                    xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchResults.ashx?q="
                                                       + context.Server.UrlEncode(sanitizedQuery)
                                                       + "&p=" + totalPages.ToString(CultureInfo.InvariantCulture));
                    xmlTextWriter.WriteAttributeString("type", "application/atom+xml");
                    xmlTextWriter.WriteEndElement();
                }

                ////this is a  link to the description
                xmlTextWriter.WriteStartElement("link");
                xmlTextWriter.WriteAttributeString("rel", "search");
                xmlTextWriter.WriteAttributeString("type", "application/opensearchdescription+xml");
                xmlTextWriter.WriteAttributeString("href", SiteRoot + "/SearchEngineInfo.ashx");
                xmlTextWriter.WriteEndElement();


                foreach (IndexItem item in searchResults)
                {
                    xmlTextWriter.WriteStartElement("entry");

                    xmlTextWriter.WriteStartElement("link");
                    xmlTextWriter.WriteValue(BuildUrl(item));
                    xmlTextWriter.WriteEndElement();

                    xmlTextWriter.WriteStartElement("id");
                    xmlTextWriter.WriteValue(BuildUrl(item));
                    xmlTextWriter.WriteEndElement();


                    //xmlTextWriter.WriteRaw("<updated>2003-12-13T18:30:02Z</updated>");

                    xmlTextWriter.WriteStartElement("content");
                    xmlTextWriter.WriteAttributeString("type", "text");
                    xmlTextWriter.WriteCData(item.Intro);
                    xmlTextWriter.WriteEndElement();


                    xmlTextWriter.WriteEndElement();
                }

                xmlTextWriter.WriteEndElement();
            }
        }
コード例 #4
0
        private void DoSearch(HttpContext context)
        {
            // this is only to make sure its initialized
            // before indexing is queued on a topic
            // because there is no HttpContext on
            // external topics and httpcontext is needed to initilaize
            // once initialized its cached
            IndexBuilderProviderCollection
                indexProviders = IndexBuilderManager.Providers;


            searchResults = IndexHelper.Search(
                siteSettings.SiteId,
                isSiteEditor,
                GetUserRoles(context),
                featureGuid,
                query,
                false,
                WebConfigSettings.SearchResultsFragmentSize,
                pageNumber,
                pageSize,
                out totalHits,
                out queryErrorOccurred);

            start = 1;
            if (pageNumber > 1)
            {
                start = ((pageNumber - 1) * pageSize) + 1;
            }

            end = pageSize;
            if (start > 1)
            {
                end += start;
            }

            if (end > totalHits)
            {
                end = totalHits;
            }

            totalPages = 1;
            int pageLowerBound = (pageSize * pageNumber) - pageSize;

            if (pageSize > 0)
            {
                totalPages = totalHits / pageSize;
            }

            if (totalHits <= pageSize)
            {
                totalPages = 1;
            }
            else
            {
                int remainder;
                Math.DivRem(totalHits, pageSize, out remainder);
                if (remainder > 0)
                {
                    totalPages += 1;
                }
            }
        }