Utilize the standard search setup in Sitecore 7+
Make sure to reference libs in your project
What we want in a simple way, is to be able to perform something like this code in an ex. button click eventhandler:
protected void btnPerformSearch_Click(object sender, EventArgs e) { var searchTerm = txtSearchString.Text; var searchBase = "/sitecore/content"; var language = Sitecore.Context.Language; var result = PerformFieldSearch(searchTerm, searchBase, language); gridViewSearchResults.DataSource = result; gridViewSearchResults.DataBind(); }
so the qustion is how do we implement the PerformNameSearch function for the code to work.
There are two examples where the only difference between them here are the syntax of Linq.
1.
private IEnumerable<SearchResultItem> PerformNameSearch(string searchString, string searchBase, Language language) { var index = ContentSearchManager.GetIndex("sitecore_master_index"); using (var context = index.CreateSearchContext(SearchSecurityOptions.EnableSecurityCheck)) { var queryable = context.GetQueryable<SearchResultItem>(); var results = queryable.Where( i => i.Path.StartsWith(searchBase) && i.Language == language.Name && i.Name.Contains(searchString)); return results.ToList(); } }
2.
private IEnumerable<SearchResultItem> PerformFieldSearch(string searchString, string searchBase, Language language) { //Type: Sitecore.ContentSearch.LuceneProvider.LuceneIndex var index = ContentSearchManager.GetIndex("sitecore_master_index"); //Type: Sitecore.ContentSearch.LuceneProvider.LuceneSearchContext using (var context = index.CreateSearchContext(SearchSecurityOptions.EnableSecurityCheck)) { var queryable = context.GetQueryable<SearchResultItem>(); var results = from SearchResultItem sri in queryable where sri.Name.Contains(searchString) && sri.Path.StartsWith(searchBase) && sri.Language.Equals(language.Name) select sri; return results.ToList(); } }