public async Task <IList <SearchableCategory> > GetCategories(SearchArgs searchArgs) { var fieldsToSearch = new Collection <TextSearchField <CategoryIndexItem> > { new() { Field = field => field.CategoryName } }; var request = await ElasticSearchRequest <CategoryIndexItem> .Init(_elasticSearchService) .CreateSearchRequestQuery(searchArgs, fieldsToSearch) .CreateSort(searchArgs) .PipeAsync(async searchRequest => await searchRequest.BuildAsync()); var response = await _elasticSearchService.SearchAsync(request); var categories = response.SearchResults.Documents; var dtos = _mapper.Map <IList <SearchableCategory> >(categories); return(dtos); }
public async Task <List <PostElasticIndexDto> > SuggestSearchAsync(string searchText, int skipItemCount = 0, int maxItemCount = 5) { try { var indexName = ElasticSearchItemsConst.PostIndexName; var queryy = new Nest.SearchDescriptor <PostElasticIndexDto>() // SearchDescriptor burada oluşturacağız .Suggest(su => su .Completion("post_suggestions", c => c.Field(f => f.Suggest) .Analyzer("simple") .Prefix(searchText) .Fuzzy(f => f.Fuzziness(Nest.Fuzziness.Auto)) .Size(10)) ); var returnData = await _elasticSearchService.SearchAsync <PostElasticIndexDto, int>(indexName, queryy, 0, 0); var data = JsonConvert.SerializeObject(returnData); var suggestsList = returnData.Suggest.Count > 0 ? from suggest in returnData.Suggest["post_suggestions"] from option in suggest.Options select new PostElasticIndexDto { Score = option.Score, CategoryName = option.Source.CategoryName, Title = option.Source.Title, UserInfo = option.Source.UserInfo, Suggest = option.Source.Suggest, Url = option.Source.Url, Id = option.Source.Id } : null; return(await Task.FromResult(suggestsList.ToList())); } catch (Exception ex) { return(await Task.FromException <List <PostElasticIndexDto> >(ex)); } }