コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }