public override void Process(BuildQueryArgs args) { if (args.TabItem?.ApplyLatestVersion ?? false) { args.Query = args.Query.Cast <NimbleSearchResultItem>().Filter(x => x.IsLatestVersion); } }
public override void Process(BuildQueryArgs args) { if (args.TabItem?.ApplyCurrentLanguage ?? false) { var lang = Sitecore.Context.Language?.Name; if (!string.IsNullOrWhiteSpace(lang)) { args.Query = args.Query.Cast <NimbleSearchResultItem>().Filter(x => x.Language == lang); } } }
public override void Process(BuildQueryArgs args) { if (string.IsNullOrWhiteSpace(args.SearchParameters.Keyword)) { return; } // TODO: Get keyword fields from tab // default _content args.Query = args.Query.Where(i => i.Content.Contains(args.SearchParameters.Keyword)); }
public override void Process(BuildQueryArgs args) { var rules = args.TabItem?.QueryFilter; if (string.IsNullOrWhiteSpace(rules)) { return; } var queryFilterPredicate = this.GetPredicatesFromRules(args.SearchContext, rules, args.TabItem?.Database); if (queryFilterPredicate != null) { args.Query = args.Query.Filter(queryFilterPredicate); } }
public override void Process(BuildQueryArgs args) { // If tab defines start locations... var locations = args.TabItem?.StartLocations; if (locations == null || !locations.Any()) { return; } // Apply Start Locations var rootPredicates = PredicateBuilder.False <SearchResultItem>(); foreach (var rootId in locations) { rootPredicates = rootPredicates.Or(item => item.Paths.Contains(rootId)); } args.Query = args.Query.Filter(rootPredicates); }
public override void Process(BuildQueryArgs args) { // If tab defines templates... var templates = args.TabItem?.TemplateIDs; if (templates == null || templates.Length <= 0) { return; } // Apply template filter var templatePredicates = PredicateBuilder.False <NimbleSearchResultItem>(); foreach (var templateId in templates) { var templateGuid = IdHelper.NormalizeGuid(templateId); templatePredicates = templatePredicates.Or(x => x.AllTemplates.Contains(templateGuid)); } args.Query = args.Query.Cast <NimbleSearchResultItem>().Filter(templatePredicates); }
public override void Process(BuildQueryArgs args) { var viewOptions = args.TabItem.ViewOptions; var defaultView = args.TabItem.DefaultViewOption?.ID.Guid ?? viewOptions?.FirstOrDefault()?.ID.Guid ?? Guid.Empty; // Validate view parameter if (args.SearchParameters.View == Guid.Empty || !(viewOptions?.Any(x => x.ID.Guid == args.SearchParameters.View) ?? false) ) { args.SearchParameters.View = defaultView; } // Validate PageSize var validPageSizes = GetPageSizes(args.SearchParameters.View, args.TabItem.Database) ?? new int[] { }; var defaultPageSize = validPageSizes.Length > 0 ? validPageSizes.First() : 10; if (!validPageSizes.Contains(args.SearchParameters.PageSize)) { args.SearchParameters.PageSize = defaultPageSize; } // Validate page if (args.SearchParameters.Page <= 0) { args.SearchParameters.Page = 1; } // Apply paging var page = args.SearchParameters.Page; var pageSize = args.SearchParameters.PageSize; if (pageSize > 0) { args.Query = args.Query.Page(page - 1, pageSize); // input is zero base, so -1 } }
public override void Process(BuildQueryArgs args) { var boosts = args.TabItem?.Boosts; if (boosts == null || boosts.Length <= 0) { return; } var boostArgs = new ApplyBoostArgs { SearchParameters = args.SearchParameters, Query = args.Query }; foreach (var boost in boosts) { boostArgs.BoostItem = boost; CorePipeline.Run(Abstractions.Constants.Pipeline.ApplyBoost, boostArgs); } args.Query = boostArgs.Query; }
public override void Process(BuildQueryArgs args) { // Validate Sort option Item sortItem = null; var sortOptions = args.TabItem.SortOptions ?? new Sitecore.Data.Items.Item[] { }; var defaultSortOption = args.TabItem.DefaultSortOption ?? sortOptions?.FirstOrDefault(); if (!sortOptions.Any(x => x.ID.Guid == args.SearchParameters.Sort)) { args.SearchParameters.Sort = defaultSortOption?.ID.Guid ?? Guid.Empty; sortItem = defaultSortOption; } else { sortItem = sortOptions.First(x => x.ID.Guid == args.SearchParameters.Sort); } if (sortItem == null || sortItem.ID.Guid == Constants.RelevanceOption) { args.SearchParameters.Sort = Constants.RelevanceOption; return; } var sortField = sortItem[SortOption.FieldName.IndexProperty]; if (string.IsNullOrWhiteSpace(sortField)) { return; } var isDesc = sortItem[SortOption.FieldName.IsDescending] == "1"; args.Query = isDesc ? args.Query.OrderByDescending(x => x[sortField]) : args.Query.OrderBy(x => x[sortField]); }
public override void Process(BuildQueryArgs args) { args.Query = args.Query.Cast <NimbleSearchResultItem>().Filter(x => !x.ExcludeFromSearchResults); }
public SearchResponse PerformSearch(TabItem tab, SearchParameters parameters) { Assert.ArgumentNotNull(tab, nameof(tab)); Assert.ArgumentNotNull(parameters, nameof(parameters)); // Init Query var initArgs = new InitQueryArgs { TabItem = tab, SearchParameters = parameters }; CorePipeline.Run(Pipeline.InitQuery, initArgs); Assert.ArgumentNotNullOrEmpty(initArgs.IndexName, nameof(initArgs.IndexName)); var searchIndex = ContentSearchManager.GetIndex(initArgs.IndexName); using (var context = searchIndex.CreateSearchContext(initArgs.SearchSecurityOption)) { var query = context.GetQueryable <SearchResultItem>(); var watch = System.Diagnostics.Stopwatch.StartNew(); // Build Query var queryArgs = new BuildQueryArgs { TabItem = tab, SearchParameters = parameters, Query = query, SearchContext = context }; CorePipeline.Run(Pipeline.BuildQuery, queryArgs); query = queryArgs.Query; // Apply Selected Facets var selectedFacets = GetSelectedFacets(parameters.SelectedFacets, tab.Facets); var finalQuery = ApplySelectedFacets(query, selectedFacets, parameters); // Add common (unselected) facet-ons to lessen additional queries var unselectedFacets = GetUnselectedFacets(parameters.SelectedFacets, tab.Facets); finalQuery = ApplyFacetOn(finalQuery, unselectedFacets, parameters); // Execute var results = finalQuery.Cast <NimbleSearchResultItem>().GetResults(); // Correct facet counts (for selected facets only) var facets = CorrectFacetCounts(query, selectedFacets, parameters, results.Facets?.Categories); watch.Stop(); // Map Results var resultArgs = new MapResultArgs { TabItem = tab, SearchParameters = parameters, TotalSearchResults = results.TotalSearchResults, Hits = results.Hits, FacetResults = facets, QueryDuration = watch.ElapsedMilliseconds }; CorePipeline.Run(Pipeline.MapResult, resultArgs); return(resultArgs.Response); } }