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}" + "&bd=" + modifiedBeginDate.Date.ToString("s") + "&ed=" + modifiedEndDate.Date.ToString("s") + "&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(); } }
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}&p={{0}}&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(); }
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(); } }
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; } } }