public override List <SkinnyItem> GetItems(string databaseName, string indexName, string language, string templateFilter, bool searchBaseTemplates, string locationFilter, string fullTextQuery) { var searchParam = new DateRangeSearchParam { Database = databaseName, Ranges = this.DateRanges, LocationIds = locationFilter, TemplateIds = templateFilter, SearchBaseTemplates = searchBaseTemplates, FullTextQuery = fullTextQuery, InnerCondition = GetCondition(InnerDateRangeConditionList), Language = language }; using (var runner = new QueryRunner(indexName)) { return(runner.GetItems(searchParam)); } }
/// <summary> /// Get Items to be loaded when the Control is loaded on the item /// </summary> /// <param name="current"> /// The current. /// </param> /// <returns> /// Array of Item /// </returns> protected override Item[] GetItems(Item current) { Assert.ArgumentNotNull(current, "current"); var values = StringUtil.GetNameValues(Source, '=', '&'); var refinements = new SafeDictionary <string>(); if (values["FieldsFilter"] != null) { var splittedFields = StringUtil.GetNameValues(values["FieldsFilter"], ':', ','); foreach (string key in splittedFields.Keys) { refinements.Add(key, splittedFields[key]); } } var locationFilter = values["StartSearchLocation"]; locationFilter = MakeFilterQuerable(locationFilter); var templateFilter = values["TemplateFilter"]; templateFilter = MakeTemplateFilterQuerable(templateFilter); var pageSize = values["PageSize"]; var searchParam = new DateRangeSearchParam { Refinements = refinements, LocationIds = locationFilter.IsNullOrEmpty() ? Sitecore.Context.ContentDatabase.GetItem(this.ItemID).GetParentBucketItemOrRootOrSelf().ID.ToString() : locationFilter, TemplateIds = templateFilter, FullTextQuery = values["FullTextQuery"], Language = values["Language"], PageSize = pageSize.IsEmpty() ? 10 : int.Parse(pageSize), PageNumber = this.pageNumber, SortByField = values["SortField"], SortDirection = values["SortDirection"] }; this.filter = "&location=" + (locationFilter.IsNullOrEmpty() ? Sitecore.Context.ContentDatabase.GetItem(this.ItemID).GetParentBucketItemOrRootOrSelf().ID.ToString() : locationFilter) + "&filterText=" + values["FullTextQuery"] + "&language=" + values["Language"] + "&pageSize=" + (pageSize.IsEmpty() ? 10 : int.Parse(pageSize)) + "&sort=" + values["SortField"]; if (values["TemplateFilter"].IsNotNull()) { this.filter += "&template=" + templateFilter; } using (var searcher = new IndexSearcher(Constants.Index.Name)) { var keyValuePair = searcher.GetItems(searchParam); var items = keyValuePair.Value; this.pageNumber = keyValuePair.Key / searchParam.PageSize; if (this.pageNumber <= 0) { this.pageNumber = 1; } return(items.Select(sitecoreItem => sitecoreItem.GetItem()).Where(i => i != null).ToArray()); } }
public static List <SkinnyItem> GetItems(string indexName, string language, string templateFilter, string locationFilter, string fullTextQuery, List <DateRangeSearchParam.DateRange> ranges, QueryOccurance occuranceTypeDateRanges = QueryOccurance.Must, bool performSort = false, string sortFieldName = "", bool reverse = false) { var searchParam = new DateRangeSearchParam { Database = "web", Ranges = ranges, LocationIds = locationFilter, TemplateIds = templateFilter, FullTextQuery = fullTextQuery, InnerCondition = occuranceTypeDateRanges, Language = language }; using (var runner = new QueryRunner(indexName)) { if (performSort) { return(runner.GetItems(searchParam, sortField: sortFieldName, reverse: reverse)); } else { return(runner.GetItems(searchParam)); } } }
/// <summary> /// Using a strongly types List of SearchStringModel, you can run a search based off a JSON String /// </summary> /// <returns>IEnumreable List of Results that have been typed to a smaller version of the Item Object</returns> public static IEnumerable <SitecoreItem> Search(this Item itm, out int hitCount, string relatedIds = "", string indexName = "itembuckets_buckets", string text = "", string templates = "", string location = "", string sortDirection = "", string language = "en", string id = "", string sortField = "", string itemName = "", string startDate = "", string endDate = "", int numberOfItemsToReturn = 20, int pageNumber = 0) { using (var searcher = new IndexSearcher(indexName)) { var dateSearchParam = new DateRangeSearchParam { ItemName = itemName, FullTextQuery = text, RelatedIds = relatedIds, TemplateIds = templates, LocationIds = location.IsEmpty() ? itm.ID.ToString() : location, Language = language, ID = id, SortDirection = sortDirection, SortByField = sortField, PageSize = numberOfItemsToReturn, PageNumber = pageNumber, Ranges = SearchHelper.GetDateRefinements(startDate, endDate) }; var keyValuePair = searcher.GetItems(dateSearchParam); hitCount = keyValuePair.Key; return(keyValuePair.Value); } }
protected void ApplyDateRangeSearchParam(BooleanQuery query, DateRangeSearchParam param, BooleanClause.Occur innerOccurance) { if (param.Ranges.Count <= 0) { return; } foreach (var dateParam in param.Ranges) { AddDateRangeQuery(query, dateParam, innerOccurance); } }
/// <summary> /// Using a strongly types List of SearchStringModel, you can run a search based off a JSON String /// </summary> /// <returns>IEnumreable List of Results that have been typed to a smaller version of the Item Object</returns> public static IEnumerable <SitecoreItem> Search(this Item itm, out int hitCount, string relatedIds = "", string indexName = "itembuckets_buckets", string text = "", string templates = "", string location = "", string sortDirection = "", string language = "en", string id = "", string sortField = "", string itemName = "", string startDate = "", string endDate = "", int numberOfItemsToReturn = 20, int pageNumber = 0) { var culture = CultureInfo.CreateSpecificCulture("en-US"); var startDateOut = new DateTime(); var endDateOut = new DateTime(); var startFlag = true; var endFlag = true; if (!DateTime.TryParse(startDate, culture, DateTimeStyles.None, out startDateOut)) { startDateOut = DateTime.Now; startFlag = false; } if (!DateTime.TryParse(endDate, culture, DateTimeStyles.None, out endDateOut)) { endDateOut = DateTime.Now.AddDays(1); endFlag = false; } using (var searcher = new IndexSearcher(indexName)) { var dateSearchParam = new DateRangeSearchParam { ItemName = itemName, FullTextQuery = text, RelatedIds = relatedIds, TemplateIds = templates, LocationIds = location.IsEmpty() ? itm.ID.ToString() : location, Language = language, ID = id, SortDirection = sortDirection, SortByField = sortField, PageSize = numberOfItemsToReturn, PageNumber = pageNumber }; var keyValuePair = searcher.GetItems(dateSearchParam); if (startFlag || endFlag) { dateSearchParam.Ranges = new List <DateRangeSearchParam.DateRangeField> { new DateRangeSearchParam.DateRangeField(SearchFieldIDs.CreatedDate, startDateOut, endDateOut) { InclusiveStart = true, InclusiveEnd = true } }; } hitCount = keyValuePair.Key; return(keyValuePair.Value); } }
internal static void ApplyDateRangeSearchParam(BooleanQuery query, DateRangeSearchParam param, BooleanClause.Occur innerOccurance) { if (param.Ranges == null) { return; } if (param.Ranges.Count <= 0) { return; } param.Ranges.ForEach(dateParam => AddDateRangeQuery(query, dateParam, innerOccurance)); }
/// <summary> /// Using a strongly types List of SearchStringModel, you can run a search based off a JSON String /// </summary> /// <returns>IEnumerable List of Results that have been typed to a smaller version of the Item Object</returns> public static IEnumerable <SitecoreItem> Search(this Item itm, SafeDictionary <string> refinements, out int hitCount, string relatedIds = "", string indexName = "itembuckets_buckets", string text = "", string templates = "", string location = "", string language = "en", string id = "", string sortField = "", string itemName = "", string startDate = "", int pageNumber = 0, string endDate = "", string sortDirection = "", int numberOfItemsToReturn = 20, object[] parameters = null) { if (itm.IsNull()) { Log.Warn("You are trying to run an Item Extension on an item that is null", ""); hitCount = 0; return(new List <SitecoreItem>()); } using (var searcher = new IndexSearcher(indexName)) { var dateSearchParam = new DateRangeSearchParam { ItemName = itemName, FullTextQuery = text, RelatedIds = relatedIds, TemplateIds = templates, LocationIds = location.IsEmpty() ? itm.ID.ToString() : location, Language = language, SortDirection = sortDirection, Refinements = refinements, ID = id, SortByField = sortField, PageSize = numberOfItemsToReturn, PageNumber = pageNumber, Ranges = SearchHelper.GetDateRefinements(startDate, endDate) }; var keyValuePair = searcher.GetItems(dateSearchParam); hitCount = keyValuePair.Key; return(keyValuePair.Value); } }
public virtual List <SkinnyItem> GetItemsInRange(DateRangeSearchParam param) { var globalQuery = new CombinedQuery(); ApplyLanguageClause(globalQuery, param.Language); ApplyTemplateFilter(globalQuery, param.TemplateIds); ApplyLocationFilter(globalQuery, param.LocationIds); ApplyFullTextClause(globalQuery, param.FullTextQuery); var translator = new QueryTranslator(Index); var booleanQuery = translator.ConvertCombinedQuery(globalQuery); var innerOccurance = translator.GetOccur(param.Occurance); ApplyDateRangeSearchParam(booleanQuery, param, innerOccurance); return(RunQuery(booleanQuery, param.ShowAllVersions)); }
public override List <SkinnyItem> GetItems(string databaseName, string indexName, string language, string templateFilter, string locationFilter, string fullTextQuery) { var baseCondition = GetCondition(BaseOccuranceList); var outerNumParamParamCondition = GetCondition(NumericRangeOccuranceList); var outerDateParamCondition = GetCondition(DateRangeOccuranceList); var innerNumParamParamCondition = GetCondition(InnerNumericRangeOccuranceList); var innerDateParamCondition = GetCondition(InnerDateRangeOccuranceList); var baseSearchParam = new SearchParam { Database = databaseName, LocationIds = locationFilter, TemplateIds = templateFilter, FullTextQuery = fullTextQuery, Language = language, Condition = baseCondition }; var numSearchParam = new NumericRangeSearchParam { Ranges = NumericRanges, InnerCondition = innerNumParamParamCondition, Condition = outerNumParamParamCondition }; var dateSearchParam = new DateRangeSearchParam { Ranges = DateRanges, InnerCondition = innerDateParamCondition, Condition = outerDateParamCondition }; using (var runner = new QueryRunner(indexName)) { return(runner.GetItems(new[] { baseSearchParam, numSearchParam, dateSearchParam })); } }
public override List <SkinnyItem> GetItems(string indexName, string language, string templateFilter, string locationFilter, string fullTextQuery) { var searchParam = new DateRangeSearchParam { Ranges = Ranges, LocationIds = locationFilter, TemplateIds = templateFilter, FullTextQuery = fullTextQuery, Occurance = QueryOccurance.Must, Language = language, ShowAllVersions = false }; using (var searcher = new Searcher(indexName)) { return(searcher.GetItemsInRange(searchParam)); } }
public static DateRangeSearchParam GetBaseQuery(List <SearchStringModel> _searchQuery, string locationFilter) { var startDate = DateTime.Now; var endDate = DateTime.Now.AddDays(1); var locationSearch = locationFilter; var refinements = new SafeDictionary <string>(); var searchStringModels = GetTags(_searchQuery); if (searchStringModels.Count > 0) { foreach (var ss in searchStringModels) { var query = ss.Value; if (query.Contains("tagid=")) { query = query.Split('|')[1].Replace("tagid=", string.Empty); } var db = Context.ContentDatabase ?? Context.Database; refinements.Add("_tags", db.GetItem(query).ID.ToString()); } } var author = GetAuthor(_searchQuery); var languages = GetLanguages(_searchQuery); if (languages.Length > 0) { refinements.Add("_language", languages); } var references = GetReferences(_searchQuery); var custom = GetCustom(_searchQuery); if (custom.Length > 0) { var customSearch = custom.Split('|'); if (customSearch.Length > 0) { try { refinements.Add(customSearch[0], customSearch[1]); } catch (Exception exc) { Log.Error("Could not parse the custom search query", exc); } } } var search = GetField(_searchQuery); if (search.Length > 0) { var customSearch = search; refinements.Add(customSearch, GetText(_searchQuery)); } var fileTypes = GetFileTypes(_searchQuery); if (fileTypes.Length > 0) { refinements.Add("extension", GetFileTypes(_searchQuery)); } var s = GetSite(_searchQuery); if (s.Length > 0) { var siteContext = SiteContextFactory.GetSiteContext(SiteManager.GetSite(s).Name); var db = Context.ContentDatabase ?? Context.Database; var startItemId = db.GetItem(siteContext.StartPath); locationSearch = startItemId.ID.ToString(); } var culture = CultureInfo.CreateSpecificCulture("en-US"); var startFlag = true; var endFlag = true; if (GetStartDate(_searchQuery).Any()) { if (!DateTime.TryParse(GetStartDate(_searchQuery), culture, DateTimeStyles.None, out startDate)) { startDate = DateTime.Now; } startFlag = false; } if (GetEndDate(_searchQuery).Any()) { if (!DateTime.TryParse(GetEndDate(_searchQuery), culture, DateTimeStyles.None, out endDate)) { endDate = DateTime.Now.AddDays(1); } endFlag = false; } var returnResult = new DateRangeSearchParam { ID = GetID(_searchQuery), ShowAllVersions = false, FullTextQuery = GetText(_searchQuery), Refinements = refinements, RelatedIds = references.Any() ? references : string.Empty, TemplateIds = GetTemplates(_searchQuery), LocationIds = GetLocation(_searchQuery, locationFilter), Language = languages, IsFacet = true, Author = author == string.Empty ? string.Empty : author, }; if (!startFlag || !endFlag) { returnResult.Ranges = new List <DateRangeSearchParam.DateRangeField> { new DateRangeSearchParam.DateRangeField(SearchFieldIDs.CreatedDate, startDate, endDate) { InclusiveStart = true, InclusiveEnd = true } }; } return(returnResult); }
/// <summary> /// Using a strongly types List of SearchStringModel, you can run a search based off a JSON String /// </summary> /// <param name="itm"> /// The itm. /// </param> /// <param name="currentSearchString"> /// The current Search String. /// </param> /// <param name="hitCount"> /// The hit Count. /// </param> /// <param name="indexName"> /// The index Name. /// </param> /// <param name="sortField"> /// The sort Field. /// </param> /// <param name="sortDirection"> /// The sort Direction. /// </param> /// <param name="pageSize"> /// The page Size. /// </param> /// <param name="pageNumber"> /// The page Number. /// </param> /// <param name="parameters"> /// The parameters. /// </param> /// <returns> /// IEnumreable List of Results that have been typed to a smaller version of the Item Object /// </returns> public static IEnumerable <SitecoreItem> FullSearch(this Item itm, List <SearchStringModel> currentSearchString, out int hitCount, string indexName = "itembuckets_buckets", string sortField = "", string sortDirection = "", int pageSize = 0, int pageNumber = 0, object[] parameters = null) { var startDate = DateTime.Now; var endDate = DateTime.Now.AddDays(1); var locationSearch = LocationFilter; var refinements = new SafeDictionary <string>(); var searchStringModels = SearchHelper.GetTags(currentSearchString); if (searchStringModels.Count > 0) { foreach (var ss in searchStringModels) { var query = ss.Value; if (query.Contains("tagid=")) { query = query.Split('|')[1].Replace("tagid=", string.Empty); } var db = Context.ContentDatabase ?? Context.Database; refinements.Add("_tags", db.GetItem(query).ID.ToString()); } } var author = SearchHelper.GetAuthor(currentSearchString); var languages = SearchHelper.GetLanguages(currentSearchString); if (languages.Length > 0) { refinements.Add("_language", languages); } var references = SearchHelper.GetReferences(currentSearchString); var custom = SearchHelper.GetCustom(currentSearchString); if (custom.Length > 0) { var customSearch = custom.Split('|'); if (customSearch.Length > 0) { try { refinements.Add(customSearch[0], customSearch[1]); } catch (Exception exc) { Log.Error("Could not parse the custom search query", exc); } } } var search = SearchHelper.GetField(currentSearchString); if (search.Length > 0) { var customSearch = search; refinements.Add(customSearch, SearchHelper.GetText(currentSearchString)); } var fileTypes = SearchHelper.GetFileTypes(currentSearchString); if (fileTypes.Length > 0) { refinements.Add("extension", SearchHelper.GetFileTypes(currentSearchString)); } var s = SearchHelper.GetSite(currentSearchString); if (s.Length > 0) { SiteContext siteContext = SiteContextFactory.GetSiteContext(SiteManager.GetSite(s).Name); var db = Context.ContentDatabase ?? Context.Database; var startItemId = db.GetItem(siteContext.StartPath); locationSearch = startItemId.ID.ToString(); } var culture = CultureInfo.CreateSpecificCulture("en-US"); var startFlag = true; var endFlag = true; if (SearchHelper.GetStartDate(currentSearchString).Any()) { if (!DateTime.TryParse(SearchHelper.GetStartDate(currentSearchString), culture, DateTimeStyles.None, out startDate)) { startDate = DateTime.Now; } startFlag = false; } if (SearchHelper.GetEndDate(currentSearchString).Any()) { if (!DateTime.TryParse(SearchHelper.GetEndDate(currentSearchString), culture, DateTimeStyles.None, out endDate)) { endDate = DateTime.Now.AddDays(1); } endFlag = false; } using (var searcher = new IndexSearcher(indexName)) { var location = SearchHelper.GetLocation(currentSearchString, locationSearch); var locationIdFromItem = itm != null?itm.ID.ToString() : string.Empty; var rangeSearch = new DateRangeSearchParam { ID = SearchHelper.GetID(currentSearchString).IsEmpty() ? SearchHelper.GetRecent(currentSearchString) : SearchHelper.GetID(currentSearchString), ShowAllVersions = false, FullTextQuery = SearchHelper.GetText(currentSearchString), Refinements = refinements, RelatedIds = references.Any() ? references : string.Empty, SortDirection = sortDirection, TemplateIds = SearchHelper.GetTemplates(currentSearchString), LocationIds = location == string.Empty ? locationIdFromItem : location, Language = languages, SortByField = sortField, PageNumber = pageNumber, PageSize = pageSize, Author = author == string.Empty ? string.Empty : author, }; if (!startFlag || !endFlag) { rangeSearch.Ranges = new List <DateRangeSearchParam.DateRangeField> { new DateRangeSearchParam.DateRangeField(SearchFieldIDs.CreatedDate, startDate, endDate) { InclusiveStart = true, InclusiveEnd = true } }; } var returnResult = searcher.GetItems(rangeSearch); hitCount = returnResult.Key; return(returnResult.Value); } }
public static DateRangeSearchParam GetSearchSettings(List <SearchStringModel> currentSearchString, string locationFilter) { var locationSearch = locationFilter; var refinements = new SafeDictionary <string>(); refinements = GetTagRefinements(currentSearchString); var author = SearchHelper.GetAuthor(currentSearchString); var languages = SearchHelper.GetLanguages(currentSearchString); if (languages.Length > 0) { refinements.Add("_language", languages); } var references = SearchHelper.GetReferences(currentSearchString); var custom = SearchHelper.GetCustom(currentSearchString); if (custom.Length > 0) { var customSearch = custom.Split('|'); if (customSearch.Length > 0) { try { refinements.Add(customSearch[0], customSearch[1]); } catch (Exception exc) { Log.Error("Could not parse the custom search query", exc); } } } var search = SearchHelper.GetField(currentSearchString); if (search.Length > 0) { var customSearch = search; refinements.Add(customSearch, SearchHelper.GetText(currentSearchString)); } var fileTypes = SearchHelper.GetFileTypes(currentSearchString); if (fileTypes.Length > 0) { refinements.Add("extension", SearchHelper.GetFileTypes(currentSearchString)); } var s = SearchHelper.GetSite(currentSearchString); if (s.Length > 0) { SiteContext siteContext = SiteContextFactory.GetSiteContext(SiteManager.GetSite(s).Name); var db = Context.ContentDatabase ?? Context.Database; var startItemId = db.GetItem(siteContext.StartPath); locationSearch = startItemId.ID.ToString(); } var location = SearchHelper.GetLocation(currentSearchString, locationSearch); var rangeSearch = new DateRangeSearchParam { ID = SearchHelper.GetID(currentSearchString).IsEmpty() ? SearchHelper.GetRecent(currentSearchString) : SearchHelper.GetID(currentSearchString), ShowAllVersions = false, FullTextQuery = SearchHelper.GetText(currentSearchString), Refinements = refinements, RelatedIds = references.Any() ? references : string.Empty, TemplateIds = SearchHelper.GetTemplates(currentSearchString), LocationIds = location, Language = languages, Author = author == string.Empty ? string.Empty : author, ItemName = SearchHelper.GetItemName(currentSearchString), Ranges = GetDateRefinements(SearchHelper.GetStartDate(currentSearchString), SearchHelper.GetEndDate(currentSearchString)) }; return(rangeSearch); }
public static List <SkinnyItem> GetItems(string indexName, string language, string templateFilter, string locationFilter, string fullTextQuery, string relationFilter, List <MultiFieldSearchParam.Refinement> refinements, QueryOccurance occuranceTypeRefinements, List <DateRangeSearchParam.DateRange> dateRanges, QueryOccurance occuranceTypeDateRanges, List <NumericRangeSearchParam.NumericRangeField> numRanges, QueryOccurance occuranceTypeNumRanges, string fieldName, string fieldValue, bool canBePartial, bool performSort = false, string sortFieldName = "", bool reverse = false) { var searchParam = new SearchParam { Database = "web", RelatedIds = relationFilter, Language = language, TemplateIds = templateFilter, LocationIds = locationFilter, FullTextQuery = fullTextQuery }; var searchParamMultiField = new MultiFieldSearchParam { Refinements = refinements, InnerCondition = occuranceTypeRefinements }; var searchParamDate = new DateRangeSearchParam { Ranges = dateRanges, InnerCondition = occuranceTypeDateRanges }; var searchParamNum = new NumericRangeSearchParam { Ranges = numRanges, InnerCondition = occuranceTypeNumRanges }; var searchParamField = new FieldSearchParam { FieldName = fieldName, FieldValue = fieldValue, Partial = canBePartial }; using (var runner = new QueryRunner(indexName)) { if (performSort) { return(runner.GetItems(new[] { searchParam, searchParamMultiField, searchParamDate, searchParamField, searchParamNum }, sortField: sortFieldName, reverse: reverse)); } else { return(runner.GetItems(new[] { searchParam, searchParamMultiField, searchParamDate, searchParamField, searchParamNum })); } } }
public static BooleanQuery ContructQuery(DateRangeSearchParam param) { var indexName = BucketManager.GetContextIndex(Context.ContentDatabase.GetItem(param.LocationIds)); if (indexName.EndsWith("_remote")) { Index = RemoteSearchManager.GetIndex(indexName) as RemoteIndex; } else if (indexName.EndsWith("_inmemory")) { Index = InMemorySearchManager.GetIndex(indexName) as InMemoryIndex; } else { Index = SearchManager.GetIndex(indexName) as Index; } if (Index.IsNotNull()) { var globalQuery = new CombinedQuery(); var fullTextQuery = param.FullTextQuery; // .TrimStart('*').TrimEnd('*') + "*"; SearcherMethods.ApplyLanguageClause(globalQuery, param.Language); if (!string.IsNullOrWhiteSpace(fullTextQuery)) { if (!fullTextQuery.StartsWith("*")) { SearcherMethods.ApplyFullTextClause(globalQuery, fullTextQuery, indexName); } } SearcherMethods.ApplyRelationFilter(globalQuery, param.RelatedIds); SearcherMethods.ApplyTemplateFilter(globalQuery, param.TemplateIds); SearcherMethods.ApplyTemplateNotFilter(globalQuery); SearcherMethods.ApplyIDFilter(globalQuery, param.ID); SearcherMethods.ApplyLocationFilter(globalQuery, param.LocationIds); SearcherMethods.ApplyRefinements(globalQuery, param.Refinements, QueryOccurance.Should); SearcherMethods.ApplyLatestVersion(globalQuery); if (Config.ExcludeContextItemFromResult) { SearcherMethods.ApplyContextItemRemoval(globalQuery, param.LocationIds); } var translator = new QueryTranslator(Index); var booleanQuery = translator.ConvertCombinedQuery(globalQuery); var innerOccurance = translator.GetOccur(param.Occurance); if (!string.IsNullOrWhiteSpace(fullTextQuery)) { if (fullTextQuery.StartsWith("*")) { SearcherMethods.ApplyFullTextClause(booleanQuery, fullTextQuery, indexName); } } SearcherMethods.ApplyAuthor(booleanQuery, param.Author); SearcherMethods.ApplyDateRangeSearchParam(booleanQuery, param, innerOccurance); if (Config.EnableBucketDebug || Constants.EnableTemporaryBucketDebug) { Log.Info("Search Clauses Number: " + booleanQuery.Clauses().Count, booleanQuery); } return(booleanQuery); } return(null); }
internal virtual KeyValuePair <int, List <SitecoreItem> > GetItems(DateRangeSearchParam param) { var db = Context.ContentDatabase ?? Sitecore.Context.Database; if (db != null) { var indexName = Util.Constants.Index.Name; var item = db.GetItem(param.LocationIds); indexName = BucketManager.GetContextIndex(item.IsNotNull() ? item : db.GetItem(Sitecore.ItemIDs.RootID)); if (indexName.EndsWith("_remote")) { Index = RemoteSearchManager.GetIndex(indexName) as RemoteIndex; } else if (indexName.EndsWith("_inmemory")) { Index = InMemorySearchManager.GetIndex(indexName) as InMemoryIndex; } else { Index = SearchManager.GetIndex(indexName) as Index; } if (Index.IsNotNull()) { var globalQuery = new CombinedQuery(); SearcherMethods.ApplyLanguageClause(globalQuery, param.Language); if (!string.IsNullOrWhiteSpace(param.FullTextQuery)) { if (!param.FullTextQuery.StartsWith("*")) { if (param.FullTextQuery != "*All*" && param.FullTextQuery != "*" && param.FullTextQuery != "**") { SearcherMethods.ApplyFullTextClause(globalQuery, param.FullTextQuery, indexName); } } } SearcherMethods.ApplyRelationFilter(globalQuery, param.RelatedIds); SearcherMethods.ApplyTemplateFilter(globalQuery, param.TemplateIds); SearcherMethods.ApplyTemplateNotFilter(globalQuery); SearcherMethods.ApplyIDFilter(globalQuery, param.ID); if (param.LocationIds.Contains("|")) { SearcherMethods.ApplyCombinedLocationFilter(globalQuery, param.LocationIds); } else { SearcherMethods.ApplyLocationFilter(globalQuery, param.LocationIds); } if (!param.Refinements.ContainsKey("__workflow state")) //Hack!!!!! { SearcherMethods.ApplyRefinements(globalQuery, param.Refinements, QueryOccurance.Should); } SearcherMethods.ApplyLatestVersion(globalQuery); if (Config.ExcludeContextItemFromResult) { SearcherMethods.ApplyContextItemRemoval(globalQuery, param.LocationIds); } var translator = new QueryTranslator(Index); var booleanQuery = translator.ConvertCombinedQuery(globalQuery); var innerOccurance = translator.GetOccur(param.Occurance); if (!string.IsNullOrWhiteSpace(param.FullTextQuery)) { if (param.FullTextQuery.StartsWith("*")) { if (param.FullTextQuery != "*All*" && param.FullTextQuery != "*" && param.FullTextQuery != "**") { SearcherMethods.ApplyFullTextClause(booleanQuery, param.FullTextQuery, indexName); } } } SearcherMethods.ApplyAuthor(booleanQuery, param.Author); SearcherMethods.ApplyDateRangeSearchParam(booleanQuery, param, innerOccurance); if (param.Refinements.ContainsKey("__workflow state")) { SearcherMethods.AddFieldValueClause(booleanQuery, "__workflow state", param.Refinements["__workflow state"], QueryOccurance.Should); } if (Config.EnableBucketDebug || Constants.EnableTemporaryBucketDebug) { Log.Info("Search Clauses Number: " + booleanQuery.Clauses().Count, this); } if (!param.SortByField.IsNullOrEmpty()) { return(this.RunQuery(booleanQuery, param.PageSize, param.PageNumber, param.SortByField, param.SortDirection)); } return(param.PageNumber != 0 ? this.RunQuery(booleanQuery, param.PageSize, param.PageNumber) : this.RunQuery(booleanQuery, 20, 0)); } } return(new KeyValuePair <int, List <SitecoreItem> >()); }
/// <summary> /// An extension of Item that allows you to launch a Search from an item /// </summary> /// <returns>List of Results of Type IEnumerable List of SitecoreItem (which implements IItem)</returns> /// <param name="startLocationItem">The start location of the search</param> /// <param name="refinements">A collection of refinements to the query</param> /// <param name="hitCount">This will output the hitCount of the search</param> /// <param name="relatedIds">Pipe delimited string of Id to query by Links to and from items</param> /// <param name="indexName">Force query to run on a particular index</param> /// <param name="text">The raw text query</param> /// <param name="templates">Pipe delimited string of Id of Templates</param> /// <param name="location">Override the location of the search with an Id</param> /// <param name="language">Query by the two letter ISO country code</param> /// <param name="id">Query by ID</param> /// <param name="sortField">Sort query by field (must be in index)</param> /// <param name="sortDirection">Sort in either "asc" or "desc"</param> /// <param name="itemName">Query by item name</param> /// <param name="startDate">mm/dd/yyyy format of start date</param> /// <param name="endDate">mm/dd/yyyy format of end date</param> /// <param name="numberOfItemsToReturn">0-XXXXXX (The bigger this number is the less performant it will be)</param> /// <example>BucketManager.Search(Sitecore.Context.Item, text: "Tim", templates: "TemplateGUID")</example> /// <example>BucketManager.Search(Sitecore.Context.Item, text: "Tim", relatedIds: "ItemGUID", sortField: "_name")</example> public static IEnumerable <SitecoreItem> Search(Item startLocationItem, SafeDictionary <string> refinements, out int hitCount, string relatedIds = "", string indexName = "itembuckets_buckets", string text = "", string templates = "", string location = "", string language = "en", string id = "", string sortField = "", string sortDirection = "", string itemName = "", string startDate = "", string endDate = "", int numberOfItemsToReturn = 20) { using (var searcher = new IndexSearcher(indexName)) { var culture = CultureInfo.CreateSpecificCulture("en-US"); var startDateOut = DateTime.Now; var endDateOut = DateTime.Now.AddDays(1); var startFlag = true; var endFlag = true; if (!DateTime.TryParse(startDate, culture, DateTimeStyles.None, out startDateOut)) { startDateOut = DateTime.Now; startFlag = false; } if (!DateTime.TryParse(endDate, culture, DateTimeStyles.None, out endDateOut)) { endDateOut = DateTime.Now.AddDays(1); endFlag = false; } if (startLocationItem.IsNull()) { Log.Warn("You are trying to run an Search on an item that has a start location of null", null); hitCount = 0; return(new List <SitecoreItem>()); } var dateSearchParam = new DateRangeSearchParam { ItemName = itemName, FullTextQuery = text, RelatedIds = relatedIds, TemplateIds = templates, LocationIds = startLocationItem.ID.ToString(), Language = language, SortDirection = sortDirection, Refinements = refinements, ID = id, SortByField = sortField, PageSize = numberOfItemsToReturn }; if (startFlag || endFlag) { dateSearchParam.Ranges = new List <DateRangeSearchParam.DateRangeField> { new DateRangeSearchParam.DateRangeField( SearchFieldIDs.CreatedDate, startDateOut, endDateOut) { InclusiveStart = true, InclusiveEnd = true } }; } var keyValuePair = searcher.GetItems(dateSearchParam); hitCount = keyValuePair.Key; return(keyValuePair.Value); } }