public void TestSort() { var member = new Member { Id = Guid.NewGuid() }; var jobAds = (from i in Enumerable.Range(1, 5) select new JobAd { Id = Guid.NewGuid(), CreatedTime = DateTime.Now.AddDays(-1 * i) }).ToList(); foreach (var jobAd in jobAds.Randomise()) { _memberJobAdListsCommand.AddJobAdToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAd.Id); IndexJobAd(jobAd, "LinkMe", false); } var query = new JobAdSortQuery { SortOrder = JobAdSortOrder.CreatedTime }; var results = SortFlagged(member, query); Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds)); query = new JobAdSortQuery { SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = false }; results = SortFlagged(member, query); Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds)); query = new JobAdSortQuery { SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = true }; results = SortFlagged(member, query); Assert.IsTrue(jobAds.Select(j => j.Id).Reverse().SequenceEqual(results.JobAdIds)); }
public LuceneSort GetSort(IMember member, JobAdSortQuery query) { switch (query.SortOrder) { case JobAdSortOrder.CreatedTime: return(_createdTimeHandler.GetSort(query)); case JobAdSortOrder.JobType: return(_jobTypesHandler.GetSort(query)); case JobAdSortOrder.Salary: return(_salaryHandler.GetSort(query)); case JobAdSortOrder.Flagged: return(new LuceneSort( new[] { new BoboCustomSortField(SearchFieldName.Id, !query.ReverseSortOrder, new SpecialsComparatorSource(false, _jobAdFlagListsQuery.GetFlaggedJobAdIds(member).Select(id => id.ToFieldValue()), SearchFieldName.Id)), SortField.FIELD_SCORE })); default: return(null); } }
protected JobAdSearchResults SortFlagged(IMember member, JobAdSortQuery jobAdQuery) { var reader = _indexWriter.getReader(); var sorter = new Sorter(reader); var filter = _indexer.GetFilter( _jobAdSortFiltersQuery.GetFlaggedIncludeJobAdIds(member), _jobAdSortFiltersQuery.GetFlaggedExcludeJobAdIds(member)); var sort = _indexer.GetSort(member, jobAdQuery); var searchResults = sorter.Sort(filter, sort == null ? null : sort.getSort(), jobAdQuery.Skip, jobAdQuery.Take ?? reader.maxDoc()); return(searchResults); }
protected JobAdSearchResults SortFolder(IMember member, Guid folderId, JobAdSortQuery query) { var reader = _indexWriter.getReader(); var sorter = new Sorter(reader); var filter = _indexer.GetFilter( _jobAdSortFiltersQuery.GetFolderIncludeJobAdIds(member, folderId), _jobAdSortFiltersQuery.GetFolderExcludeJobAdIds(member, folderId)); var sort = _indexer.GetSort(member, query); var searchResults = sorter.Sort(filter, sort == null ? null : sort.getSort(), query.Skip, query.Take ?? reader.maxDoc()); return(searchResults); }
public void TestSort() { var member = new Member { Id = Guid.NewGuid() }; var jobAds = (from i in Enumerable.Range(1, 5) select new JobAd { Id = Guid.NewGuid() }).ToList(); jobAds[0].Description.JobTypes = JobTypes.PartTime; jobAds[1].Description.JobTypes = JobTypes.JobShare; jobAds[2].Description.JobTypes = JobTypes.Contract; jobAds[3].Description.JobTypes = JobTypes.FullTime; jobAds[4].Description.JobTypes = JobTypes.Temp; foreach (var jobAd in jobAds.Randomise()) { _memberJobAdListsCommand.AddJobAdToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAd.Id); IndexJobAd(jobAd, "LinkMe", false); } // Order should be FullTime, PartTime, Contract, Temp, JobShare. var query = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType }; var results = SortFlagged(member, query); Assert.IsTrue(new[] { jobAds[3].Id, jobAds[0].Id, jobAds[2].Id, jobAds[4].Id, jobAds[1].Id }.SequenceEqual(results.JobAdIds)); query = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType, ReverseSortOrder = false }; results = SortFlagged(member, query); Assert.IsTrue(new[] { jobAds[3].Id, jobAds[0].Id, jobAds[2].Id, jobAds[4].Id, jobAds[1].Id }.SequenceEqual(results.JobAdIds)); query = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType, ReverseSortOrder = true }; results = SortFlagged(member, query); Assert.IsTrue(new[] { jobAds[1].Id, jobAds[4].Id, jobAds[2].Id, jobAds[0].Id, jobAds[3].Id }.SequenceEqual(results.JobAdIds)); }
public void TestSort() { var member = new Member { Id = Guid.NewGuid() }; var jobAds = (from i in Enumerable.Range(1, 5) select new JobAd { Id = Guid.NewGuid(), Description = { Salary = new Salary { LowerBound = 200000 - (10 * i) } } }).ToList(); foreach (var jobAd in jobAds.Randomise()) { _memberJobAdListsCommand.AddJobAdToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAd.Id); IndexJobAd(jobAd, "LinkMe", false); } var query = new JobAdSortQuery { SortOrder = JobAdSortOrder.Salary }; var results = SortFlagged(member, query); Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds)); query = new JobAdSortQuery { SortOrder = JobAdSortOrder.Salary, ReverseSortOrder = false }; results = SortFlagged(member, query); Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds)); query = new JobAdSortQuery { SortOrder = JobAdSortOrder.Salary, ReverseSortOrder = true }; results = SortFlagged(member, query); Assert.IsTrue(jobAds.Select(j => j.Id).Reverse().SequenceEqual(results.JobAdIds)); }
LuceneSort IContentHandler.GetSort(JobAdSortQuery query) { // Reverse the natural order, i.e. newest at the top. return(GetSort(!query.ReverseSortOrder)); }
public void TestSort() { //Create jobAds var integratorId = Guid.NewGuid(); var australia = _locationQuery.GetCountry("Australia"); var member = new Member { Id = Guid.NewGuid() }; var flagList = _jobAdFlagListsQuery.GetFlagList(member); var jobAd1 = new JobAd { Id = Guid.NewGuid(), Status = JobAdStatus.Open, Title = "Best Job in the World", Integration = { IntegratorUserId = integratorId }, CreatedTime = DateTime.Now, Description = { BulletPoints = new[] { "good verbal communication", "self management and independency", "good time management" }, Content = "Mutley, you snickering, floppy eared hound. When courage is needed, you're never around.", JobTypes = JobTypes.FullTime, Salary = new Salary { LowerBound = 20000, UpperBound = 40000, Rate = SalaryRate.Year, Currency = Currency.AUD }, Industries = new List <Industry> { _industriesQuery.GetIndustry("Consulting & Corporate Strategy") }, Location = new LocationReference(_locationQuery.GetCountrySubdivision(australia, "VIC")), }, }; _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, jobAd1.Id); IndexJobAd(jobAd1, "LinkMe", false); var jobAd2 = new JobAd { Id = Guid.NewGuid(), Status = JobAdStatus.Open, Title = "Not so good Job", CreatedTime = DateTime.Now, Description = { BulletPoints = new[] { "good verbal communication", "self management and independency", "bullet point 3" }, Content = "Mutley, you snickering, floppy eared hound. When courage is needed, you're never around.", JobTypes = JobTypes.Temp, Salary = new Salary { LowerBound = 200000, UpperBound = 400000, Rate = SalaryRate.Year, Currency = Currency.AUD }, Industries = new List <Industry> { _industriesQuery.GetIndustry("Engineering") }, Location = new LocationReference(_locationQuery.GetCountrySubdivision(australia, "NSW")), } }; _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, jobAd2.Id); IndexJobAd(jobAd2, "LinkMe", false); var jobAd3 = new JobAd { Id = Guid.NewGuid(), Status = JobAdStatus.Open, Title = "You really don't want this", Integration = { IntegratorUserId = integratorId }, CreatedTime = DateTime.Now.AddDays(-100), Description = { BulletPoints = new[] { "good verbal communication", "self management and independency", "bullet point 3" }, Content = "Mutley, you snickering, floppy eared hound. When courage is needed, you're never around.", JobTypes = JobTypes.PartTime, Industries = new List <Industry> { _industriesQuery.GetIndustry("Engineering") }, Location = new LocationReference(_locationQuery.GetCountrySubdivision(australia, "QLD")), } }; _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, jobAd3.Id); IndexJobAd(jobAd3, "LinkMe", false); // Sort by salary. var jobQuery = new JobAdSortQuery { SortOrder = JobAdSortOrder.Salary }; var results = SortFlagged(member, jobQuery); Assert.AreEqual(3, results.JobAdIds.Count); Assert.AreEqual(jobAd2.Id, results.JobAdIds[0]); Assert.AreEqual(jobAd1.Id, results.JobAdIds[1]); Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]); // Sort by jobtype. jobQuery = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType }; results = SortFlagged(member, jobQuery); Assert.AreEqual(3, results.JobAdIds.Count); Assert.AreEqual(jobAd1.Id, results.JobAdIds[0]); Assert.AreEqual(jobAd3.Id, results.JobAdIds[1]); Assert.AreEqual(jobAd2.Id, results.JobAdIds[2]); // Sort by jobtype II. jobAd2.Description.JobTypes = JobTypes.All; IndexJobAd(jobAd2, "LinkMe", false, false); jobQuery = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType }; results = SortFlagged(member, jobQuery); Assert.AreEqual(3, results.JobAdIds.Count); //1 & 2 are equivalent - just make sure PT is last Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]); // Sort by jobtype III. jobAd1.Description.JobTypes |= JobTypes.Temp; IndexJobAd(jobAd1, "LinkMe", false, false); jobQuery = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType }; results = SortFlagged(member, jobQuery); Assert.AreEqual(3, results.JobAdIds.Count); //1 & 2 are equivalent - just make sure PT is last Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]); // Sort by jobtype IV. jobAd1.Description.JobTypes = JobTypes.Temp | JobTypes.Contract; IndexJobAd(jobAd1, "LinkMe", false, false); jobQuery = new JobAdSortQuery { SortOrder = JobAdSortOrder.JobType }; results = SortFlagged(member, jobQuery); Assert.AreEqual(3, results.JobAdIds.Count); Assert.AreEqual(jobAd2.Id, results.JobAdIds[0]); Assert.AreEqual(jobAd3.Id, results.JobAdIds[1]); Assert.AreEqual(jobAd1.Id, results.JobAdIds[2]); // Sort by flagged list. //TODO: no support for flagging jobads yet // Sort by createTime. jobQuery = new JobAdSortQuery { SortOrder = JobAdSortOrder.CreatedTime }; results = SortFlagged(member, jobQuery); Assert.AreEqual(3, results.JobAdIds.Count); Assert.AreEqual(jobAd2.Id, results.JobAdIds[0]); Assert.AreEqual(jobAd1.Id, results.JobAdIds[1]); Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]); }
private JobAdSearchResults Sort(Guid?memberId, JobAdSortQuery sortQuery, Func <Member, IList <Guid> > getIncludeJobAdIds, Func <Member, IList <Guid> > getExcludeJobAdIds) { const string method = "Job Ad Supplemental Search"; try { #region Log Stopwatch searchTime = null; if (EventSource.IsEnabled(Event.Trace)) { searchTime = Stopwatch.StartNew(); } #endregion var member = memberId == null ? null : new Member { Id = memberId.Value }; var filter = _indexer.GetFilter(getIncludeJobAdIds(member), getExcludeJobAdIds(member)); var sort = _indexer.GetSort(member, sortQuery); #region Log if (EventSource.IsEnabled(Event.Trace)) { EventSource.Raise(Event.Trace, method, "Executing query.", Event.Arg("filter", (filter != null) ? filter.toString() : string.Empty)); } #endregion var reader = GetReader(); var sorter = new Sorter(reader); var sorts = (sort != null) ? sort.getSort() : null; var sortResults = sorter.Sort(filter, sorts, sortQuery.Skip, sortQuery.Take ?? reader.maxDoc()); #region Log if (searchTime != null) { searchTime.Stop(); EventSource.Raise(Event.Trace, method, "Query execution complete.", Event.Arg("filter", (filter != null) ? filter.toString() : string.Empty), Event.Arg("total hits", sortResults.TotalMatches), Event.Arg("result count", sortResults.JobAdIds.Count), Event.Arg("searchTime", searchTime.ElapsedMilliseconds)); } #endregion return(sortResults); } catch (Exception e) { #region Log EventSource.Raise(Event.Error, method, "Unexpected exception.", e); #endregion throw; } }
JobAdSearchResults IJobAdSortService.SortBlocked(Guid?memberId, JobAdSortQuery query) { return(Sort(memberId, query, m => _jobAdSortFiltersQuery.GetBlockedIncludeJobAdIds(m), m => _jobAdSortFiltersQuery.GetBlockedExcludeJobAdIds(m))); }
JobAdSearchResults IJobAdSortService.SortFolder(Guid?memberId, Guid folderId, JobAdSortQuery query) { return(Sort(memberId, query, m => _jobAdSortFiltersQuery.GetFolderIncludeJobAdIds(m, folderId), m => _jobAdSortFiltersQuery.GetFolderExcludeJobAdIds(m, folderId))); }
LuceneSort IContentHandler.GetSort(JobAdSortQuery query) { return(GetSort(query.ReverseSortOrder)); }
LuceneSort IContentHandler.GetSort(JobAdSortQuery query) { return(null); }
public void TestCloseJobAd() { var member = CreateMember(); var folder = _jobAdFoldersQuery.GetFolders(member)[0]; var searchQuery = new JobAdSearchQuery { AdTitle = Expression.Parse(Title) }; var sortQuery = new JobAdSortQuery(); // Add a job ad. var employer = CreateEmployer(); LogIn(employer); Get(_newJobAdUrl); CreateJobAd(employer.EmailAddress.Address); _previewButton.Click(); _publishButton.Click(); LogOut(); // Add it to the folder. var jobAd = _jobAdsQuery.GetJobAds <JobAdEntry>(_jobAdsQuery.GetJobAdIds(employer.Id, JobAdStatus.Open))[0]; _memberJobAdListsCommand.AddJobAdToFolder(member, folder, jobAd.Id); // Wait for the polling to kick in. Thread.Sleep(3 * MonitorInterval * 1000); // Do some searches. var results = _searchService1.Search(null, searchQuery); Assert.AreEqual(1, results.JobAdIds.Count); Assert.AreEqual(jobAd.Id, results.JobAdIds[0]); results = _searchService2.Search(null, searchQuery); Assert.AreEqual(1, results.JobAdIds.Count); Assert.AreEqual(jobAd.Id, results.JobAdIds[0]); results = _sortService1.SortFolder(member.Id, folder.Id, sortQuery); Assert.AreEqual(1, results.JobAdIds.Count); Assert.AreEqual(jobAd.Id, results.JobAdIds[0]); results = _sortService2.SortFolder(member.Id, folder.Id, sortQuery); Assert.AreEqual(1, results.JobAdIds.Count); Assert.AreEqual(jobAd.Id, results.JobAdIds[0]); // Close the job ad. _jobAdsCommand.CloseJobAd(jobAd); // Do some searches again. results = _searchService1.Search(null, searchQuery); Assert.AreEqual(0, results.JobAdIds.Count); results = _sortService1.SortFolder(member.Id, folder.Id, sortQuery); Assert.AreEqual(1, results.JobAdIds.Count); Assert.AreEqual(jobAd.Id, results.JobAdIds[0]); // Wait for the polling to kick in. Thread.Sleep(3 * MonitorInterval * 1000); results = _searchService2.Search(null, searchQuery); Assert.AreEqual(0, results.JobAdIds.Count); results = _sortService2.SortFolder(member.Id, folder.Id, sortQuery); Assert.AreEqual(1, results.JobAdIds.Count); Assert.AreEqual(jobAd.Id, results.JobAdIds[0]); }