private static SortDescriptor <VacancyElasticModel> Sort(VacancySortModel sortModel) { var sort = new SortDescriptor <VacancyElasticModel>(); if (sortModel == null) { return(sort.Descending(p => p.Id)); } if (sortModel.StartDate != null) { sort = sortModel.StartDate == true ? sort.Ascending(p => p.StartDate) : sort.Descending(p => p.StartDate); } else if (sortModel.RequestDate != null) { sort = sortModel.RequestDate == true ? sort.Ascending(p => p.Id) : sort.Descending(p => p.Id); } else if (sortModel.CloseDate != null) { sort = sortModel.CloseDate == true ? sort.Ascending(p => p.CloseDate) : sort.Descending(p => p.CloseDate); } else { sort = sort.Descending(p => p.Id); } return(sort); }
public async Task <byte[]> AddToExcelVacancy(int skip, int amount, VacancySearchModel searchModel, VacancySortModel sortModel) { var vacancies = await vacancyService.Search(skip, amount, searchModel, sortModel); var excelVacancyList = vacancies.Select(ConvertToExcelModel).ToList(); var result = ExcelCreator.GenerateExcel(excelVacancyList); return(result); }
public async Task <HttpContent> GetExcelByVacancies(int skip, int amount, VacancySearchModel searchModel, VacancySortModel sortModel) { var stream = new MemoryStream(await AddToExcelVacancy(skip, amount, searchModel, sortModel)); var result = CreateContent(stream, "Vacancies.xlsx"); return(result); }
public async Task <IEnumerable <VacancyElasticModel> > Search(int skip, int amount, VacancySearchModel searchModel, VacancySortModel sortModel) { var result = await Task.Run(() => _vacancyElasticRepository.Search(skip, amount, searchModel, sortModel)); return(result); }
public IEnumerable <VacancyElasticModel> Search(int skip, int amount, VacancySearchModel searchModel, VacancySortModel sortModel) { var sort = Sort(sortModel); searchModel = searchModel ?? new VacancySearchModel(); return(_client.Search <VacancyElasticModel>(s => s.Index(IndexName) .Skip(skip) .Take(amount) .Query(q => { QueryContainer queryContainer = null; if (searchModel.City != 0) { queryContainer &= q.Nested(ns => ns .Path(p => p.City) .Query(qr => qr .Term(x => x.City.Id, searchModel.City) )); } if (searchModel.Status != 0) { queryContainer &= q.Nested(ns => ns .Path(p => p.Status) .Query(qr => qr .Term(x => x.Status.Id, searchModel.Status) )); } if (searchModel.PrimarySkill != null) { if (searchModel.PrimarySkill.Id != 0) { queryContainer &= q.Nested(ns => ns .Path(p => p.PrimarySkill) .Query(qr => qr .Term(v => v.PrimarySkill.TechSkill, searchModel.PrimarySkill.Id) )); } if (searchModel.PrimarySkill.Level != 0) { queryContainer &= q.Nested(ns => ns .Path(p => p.PrimarySkill) .Query(qr => qr .Term(v => v.PrimarySkill.Level, searchModel.PrimarySkill.Level))); } } if (searchModel.RequestDate != DateTime.MinValue) { queryContainer &= q.Term(v => v.RequestDate, searchModel.RequestDate); } if (searchModel.StartDate != DateTime.MinValue) { queryContainer &= q.Term(v => v.StartDate, searchModel.StartDate); } //queryContainer &= q.MatchPhrase(fr => fr // .Field(z => z.ProjectName) // .Query(searchModel.ProjectName) // .Fuzziness(Fuzziness.Auto) // .FuzzyTranspositions() // .MaxExpansions(2) // .MinimumShouldMatch(2) // .PrefixLength(2) // .Operator(Operator.Or) // .Slop(2) // .Boost(2)); if (searchModel.ProjectName != null) { var projectNames = searchModel.ProjectName.Split(' '); foreach (var projectName in projectNames) { queryContainer &= q.MatchPhrase(mp => mp.Field(f => f.ProjectName).Query(projectName) .Fuzziness(Fuzziness.EditDistance(2))); } } if (searchModel.VacancyName != null) { var vacancyNames = searchModel.VacancyName.Split(' '); foreach (var vacancyName in vacancyNames) { queryContainer &= q.MatchPhrase(mp => mp.Field(f => f.VacancyName).Query(vacancyName) .Fuzziness(Fuzziness.EditDistance(2))); } } //queryContainer &= q.Fuzzy(x => x // .Field(z => z.ProjectName) // .Value(searchModel.ProjectName) // .Fuzziness(Fuzziness.Auto) //); //queryContainer &= q.Fuzzy(x => x // .Field(z => z.VacancyName) // .Value(searchModel.VacancyName) // .Fuzziness(Fuzziness.Auto) // ); return queryContainer; } ) .Sort(p => p = sort) ).Documents); }
private static IEnumerable <Vacancy> Sorting(IEnumerable <Vacancy> vacancies, VacancySortModel sortModel) { if (sortModel == null) { vacancies = vacancies.OrderByDescending(x => x.Id); return(vacancies); } if (sortModel.StartDate != null) { vacancies = sortModel.StartDate == true ? vacancies.OrderBy(x => x.StartDate) : vacancies.OrderByDescending(x => x.StartDate); } else if (sortModel.RequestDate != null) { vacancies = sortModel.RequestDate == true ? vacancies.OrderBy(x => x.RequestDate) : vacancies.OrderByDescending(x => x.RequestDate); } else if (sortModel.CloseDate != null) { vacancies = sortModel.CloseDate == true ? vacancies.OrderBy(x => x.CloseDate) : vacancies.OrderByDescending(x => x.CloseDate); } else { vacancies = vacancies.OrderByDescending(x => x.Id); } return(vacancies); }
public async Task <ICollection <Vacancy> > Search(int skip, int amount, VacancySearchModel searchModel, VacancySortModel sortModel) { IQueryable <Vacancy> vacancies; vacancies = searchModel == null?vacancyRepository.ReadAll() : vacancyRepository.Find(searchModel); var res = Sorting(vacancies, sortModel).Skip(skip).Take(amount); var vacancyList = await Task.Run(() => res.ToList()); return(vacancyList); }