protected virtual IList <IFilter> GetFilters(CategoryIndexedSearchCriteria criteria) { var result = new List <IFilter>(); if (!string.IsNullOrEmpty(criteria.Keyword)) { var parseResult = _searchPhraseParser.Parse(criteria.Keyword); criteria.Keyword = parseResult.Keyword; result.AddRange(parseResult.Filters); } if (criteria.ObjectIds != null) { result.Add(new IdsFilter { Values = criteria.ObjectIds }); } if (!string.IsNullOrEmpty(criteria.CatalogId)) { result.Add(FiltersHelper.CreateTermFilter("catalog", criteria.CatalogId.ToLowerInvariant())); } result.Add(FiltersHelper.CreateOutlineFilter(criteria)); var terms = criteria.GetTerms(); result.AddRange(terms.Select(term => FiltersHelper.CreateTermFilter(term.Key, term.Values))); return(result); }
protected virtual IList <SortingField> GetSorting(CategoryIndexedSearchCriteria criteria) { var result = new List <SortingField>(); //For sorting by relevance have to keep sortInfo clear var needClearSortInfo = false; var priorityFields = criteria.GetPriorityFields(); foreach (var sortInfo in criteria.SortInfos) { var fieldName = sortInfo.SortColumn.ToLowerInvariant(); var isDescending = sortInfo.SortDirection == SortDirection.Descending; switch (fieldName) { case "relevance": needClearSortInfo = true; break; case "priority": result.AddRange(priorityFields.Select(priorityField => new SortingField(priorityField, isDescending))); break; case "name": case "title": result.Add(new SortingField("name", isDescending)); break; default: result.Add(new SortingField(fieldName, isDescending)); break; } } if (!result.Any()) { result.AddRange(priorityFields.Select(priorityField => new SortingField(priorityField, true))); result.Add(new SortingField("__sort")); } if (needClearSortInfo) { result.Clear(); } return(result); }
public async Task <ActionResult <CategoryIndexedSearchResult> > SearchCategories([FromBody] CategoryIndexedSearchCriteria criteria) { criteria.ObjectType = KnownDocumentTypes.Category; var result = await _categoryIndexedSearchService.SearchAsync(criteria); return(Ok(result)); }
public async Task <ActionResult <CategoryIndexedSearchResult> > SearchCategories([FromBody] CategoryIndexedSearchCriteria criteria) { criteria.ObjectType = KnownDocumentTypes.Category; var result = await _categoryIndexedSearchService.SearchAsync(criteria); //It is a important to return serialized data by such way. Instead you have a slow response time for large outputs //https://github.com/dotnet/aspnetcore/issues/19646 return(Content(JsonConvert.SerializeObject(result, _jsonOptions.SerializerSettings), "application/json")); }