protected void Page_Load(object sender, EventArgs e) { InitLookUpDictionary(); //Check we have a search term var orgSearchTerm = Request.QueryString["q"].Trim(); searchTerm = orgSearchTerm.Replace(" OR ", " ").Replace(" or ", " "); // Replace double whitespaces with single space as they were giving errors searchTerm = Regex.Replace(searchTerm, @"\s{2,}", " "); if (string.IsNullOrEmpty(searchTerm) || searchTerm.Length == 1) { phNotValid.Visible = true; phResults.Visible = false; return; } Searcher = ExamineManager.Instance.SearchProviderCollection["MultiIndexSearcher"]; //Search Criteria for WIKI & Projects bool andSearch = false; var searchCriteria = Searcher.CreateSearchCriteria(BooleanOperation.Or); if (searchTerm.IndexOf("\"") == -1 && searchTerm.ToLower().IndexOf(" and ") > -1) { andSearch = true; searchTerm = searchTerm.Replace(" and ", " ").Replace(" AND ", " "); } /*var searchFilter = searchCriteria.Field("a","b").Or().GroupedOr .GroupedOr(new string[] { "nodeName", "bodyText", "description", "Title", "Body", "CommentsContent" }, searchTerm) .Compile();*/ var searchQuery = searchTerm.BuildExamineString(10, "nodeName", andSearch); searchQuery += searchTerm.BuildExamineString(8, "bodyText", andSearch); searchQuery += searchTerm.BuildExamineString(9, "description", andSearch); searchQuery += searchTerm.BuildExamineString(10, "Title", andSearch); searchQuery += searchTerm.BuildExamineString(8, "Body", andSearch); searchQuery += searchTerm.BuildExamineString(7, "CommentsContent", andSearch).TrimEnd(' '); var searchFilter = searchCriteria.RawQuery(searchQuery); searchResults = Searcher.Search(searchFilter).OrderByDescending(x => x.Score); // set the searchterm back for the results view searchTerm = orgSearchTerm; //Get where to search (content) string searchWhere = Request.QueryString["content"]; searchResults = FilterOnContentType(searchWhere, searchResults); if (Request.QueryString["OrderByDate"] == "1") { var sortOrder = Request.QueryString["SortOrder"]; if (sortOrder != null && sortOrder.ToLower() == "desc") { OrderByDateDescLink.CssClass = OrderByDateDescLink.CssClass + "linkNoColor"; searchResults = searchResults.OrderByDescending(x => x.getDateSortable()); } else { OrderByDateAscLink.CssClass = OrderByDateAscLink.CssClass + "linkNoColor"; searchResults = searchResults.OrderBy(x => x.getDateSortable()); } } else { OrderByNoneLink.CssClass = OrderByNoneLink.CssClass + "linkNoColor"; } BindResultsAndSetUpPaging(searchResults); }
protected void Page_Load(object sender, EventArgs e) { //Check we have a search term var orgSearchTerm = Request.QueryString["q"].Trim(); searchTerm = orgSearchTerm.Replace(" OR ", " ").Replace(" or ", " "); if (string.IsNullOrEmpty(searchTerm) || searchTerm.Length == 1) { phNotValid.Visible = true; phResults.Visible = false; return; } Searcher = ExamineManager.Instance.SearchProviderCollection["MultiIndexSearcher"]; //Search Criteria for WIKI & Projects bool andSearch = false; var searchCriteria = Searcher.CreateSearchCriteria(BooleanOperation.Or); if (searchTerm.IndexOf("\"") == -1 && searchTerm.ToLower().IndexOf(" and ") > -1) { andSearch = true; searchTerm = searchTerm.Replace(" and ", " ").Replace(" AND ", " "); } /*var searchFilter = searchCriteria.Field("a","b").Or().GroupedOr .GroupedOr(new string[] { "nodeName", "bodyText", "description", "Title", "Body", "CommentsContent" }, searchTerm) .Compile();*/ var searchQuery = searchTerm.BuildExamineString(10, "nodeName", andSearch); searchQuery += searchTerm.BuildExamineString(8, "bodyText", andSearch); searchQuery += searchTerm.BuildExamineString(9, "description", andSearch); searchQuery += searchTerm.BuildExamineString(10, "Title", andSearch); searchQuery += searchTerm.BuildExamineString(8, "Body", andSearch); searchQuery += searchTerm.BuildExamineString(7, "CommentsContent", andSearch).TrimEnd(' '); var searchFilter = searchCriteria.RawQuery(searchQuery); searchResults = Searcher.Search(searchFilter).OrderByDescending(x => x.Score); // set the searchterm back for the results view searchTerm = orgSearchTerm; //Get where to search (content) string searchWhere = Request.QueryString["content"]; if (searchWhere.Contains("wiki") && !searchWhere.Contains("project") && !searchWhere.Contains("forum")) { //only wiki searchResults = from r in searchResults where r["__IndexType"] == "content" && r["nodeTypeAlias"] == "WikiPage" select r; } else if (!searchWhere.Contains("wiki") && searchWhere.Contains("project") && !searchWhere.Contains("forum")) { //only projects searchResults = from r in searchResults where r["__IndexType"] == "content" && (r["nodeTypeAlias"] == "Project" && r["projectLive"] == "1") select r; } else if (!searchWhere.Contains("wiki") && !searchWhere.Contains("project") && searchWhere.Contains("forum")) { //only forum searchResults = from r in searchResults where r["__IndexType"] == "documents" select r; } else if (searchWhere.Contains("wiki") && searchWhere.Contains("project") && !searchWhere.Contains("forum")) { //wiki and projects searchResults = from r in searchResults where r["__IndexType"] == "content" && (r["nodeTypeAlias"] == "WikiPage" || (r["nodeTypeAlias"] == "Project" && r["projectLive"] == "1")) select r; } else if (searchWhere.Contains("wiki") && !searchWhere.Contains("project") && searchWhere.Contains("forum")) { //wiki and forum searchResults = from r in searchResults where r["__IndexType"] == "documents" || r["nodeTypeAlias"] == "WikiPage" select r; } else if (!searchWhere.Contains("wiki") && searchWhere.Contains("project") && searchWhere.Contains("forum")) { //project and forum searchResults = from r in searchResults where r["__IndexType"] == "documents" || (r["nodeTypeAlias"] == "Project" && r["projectLive"] == "1") select r; } else { searchResults = from r in searchResults where r["__IndexType"] == "documents" || r["nodeTypeAlias"] == "WikiPage" || (r["nodeTypeAlias"] == "Project" && r["projectLive"] == "1") select r; } //Setup paging. If there isn't a page specified default to page 0 int page = 0; int.TryParse(Request.QueryString["p"], out page); int ItemsPerPage = 20; //Bind repater to the list of results searchResultListing.DataSource = searchResults.Skip(page * ItemsPerPage).Take(ItemsPerPage); searchResultListing.DataBind(); //Page numbering... int numberOfResults = searchResults.Count(); int numberOfPages = (int)Math.Round((float)numberOfResults / (float)ItemsPerPage, 0); if (numberOfPages > 1) { //Lets generate the HTML string up for the pager.... pager.Text = "<div><strong>Pages:</strong></div><ul class=\"deliPaging\">"; for (int i = 0; i < numberOfPages; i++) { pager.Text += "<li>"; if (page == i) pager.Text += "<a href='?q=" + searchTerm + "&content=" + Request.QueryString["content"] + "&p=" + i + "' class='selected'>"; else pager.Text += "<a href='?q=" + searchTerm + "&content=" + Request.QueryString["content"] + "&p=" + i + "'>"; pager.Text += i + 1; pager.Text += "</a>"; pager.Text += "</li>"; } pager.Text += "</ul>"; } }