es筛选bug修复

This commit is contained in:
冯辉
2026-06-27 23:03:37 +08:00
parent a23f3a29bb
commit 87a7036ceb

View File

@@ -535,17 +535,17 @@ public class ESJobSearchImpl implements IESJobSearchService
Long userMinSalary = Objects.nonNull(esJobSearch.getSalaryMin()) ? esJobSearch.getSalaryMin() : esJobSearch.getMinSalary(); Long userMinSalary = Objects.nonNull(esJobSearch.getSalaryMin()) ? esJobSearch.getSalaryMin() : esJobSearch.getMinSalary();
Long userMaxSalary = Objects.nonNull(esJobSearch.getSalaryMax()) ? esJobSearch.getSalaryMax() : esJobSearch.getMaxSalary(); Long userMaxSalary = Objects.nonNull(esJobSearch.getSalaryMax()) ? esJobSearch.getSalaryMax() : esJobSearch.getMaxSalary();
// 岗位薪资范围与用户期望薪资范围有交集 // 岗位最高薪资必须在用户筛选范围内
// 条件:岗位最薪资 <= 用户最大薪资 AND 岗位最大薪资 >= 用户最小薪资 // 条件:岗位最薪资 <= 用户最大薪资 AND 岗位最大薪资 >= 用户最小薪资
if(Objects.nonNull(userMinSalary) && Objects.nonNull(userMaxSalary)){ if(Objects.nonNull(userMinSalary) && Objects.nonNull(userMaxSalary)){
wrapper.and(x->x.le(ESJobDocument::getMinSalary,userMaxSalary) wrapper.and(x->x.le(ESJobDocument::getMaxSalary,userMaxSalary)
.ge(ESJobDocument::getMaxSalary,userMinSalary)); .ge(ESJobDocument::getMaxSalary,userMinSalary));
} else if(Objects.nonNull(userMinSalary)){ } else if(Objects.nonNull(userMinSalary)){
// 只有最小薪资:岗位最大薪资 >= 用户最小薪资 // 只有最小薪资:岗位最大薪资 >= 用户最小薪资
wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,userMinSalary)); wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,userMinSalary));
} else if(Objects.nonNull(userMaxSalary)){ } else if(Objects.nonNull(userMaxSalary)){
// 只有最大薪资:岗位最薪资 <= 用户最大薪资 // 只有最大薪资:岗位最薪资 <= 用户最大薪资
wrapper.and(x->x.le(ESJobDocument::getMinSalary,userMaxSalary)); wrapper.and(x->x.le(ESJobDocument::getMaxSalary,userMaxSalary));
} }
if(!StringUtil.isEmptyOrNull(esJobSearch.getExperience())){ if(!StringUtil.isEmptyOrNull(esJobSearch.getExperience())){
Integer maxValue = StringUtil.findMaxValue(esJobSearch.getExperience()); Integer maxValue = StringUtil.findMaxValue(esJobSearch.getExperience());
@@ -644,20 +644,37 @@ public class ESJobSearchImpl implements IESJobSearchService
.match(ESJobDocument::getDescription,jobQuery.getJobTitle().trim(),1.0f)); .match(ESJobDocument::getDescription,jobQuery.getJobTitle().trim(),1.0f));
} }
if(hasText(jobQuery.getEducation())){ if(hasText(jobQuery.getEducation())){
wrapper.and(a->a.eq(ESJobDocument::getEducation,jobQuery.getEducation().trim())); // 支持逗号分隔的多值筛选(如 "3,4"
String eduStr = jobQuery.getEducation().trim();
if (eduStr.contains(",")) {
List<String> eduList = StringUtil.convertStringToStringList(eduStr);
wrapper.and(a->a.in(ESJobDocument::getEducation,eduList));
} else {
wrapper.and(a->a.eq(ESJobDocument::getEducation,eduStr));
}
} }
if(hasText(jobQuery.getArea())){ if(hasText(jobQuery.getArea())){
List<Integer> integers = StringUtil.convertStringToIntegerList(jobQuery.getArea().trim()); List<Integer> integers = StringUtil.convertStringToIntegerList(jobQuery.getArea().trim());
wrapper.and(x->x.in(ESJobDocument::getJobLocationAreaCode,integers)); wrapper.and(x->x.in(ESJobDocument::getJobLocationAreaCode,integers));
} }
if(hasText(jobQuery.getExperience())){ if(hasText(jobQuery.getExperience())){
wrapper.and(a->a.le(ESJobDocument::getExperience,jobQuery.getExperience().trim())); // 支持逗号分隔的多值筛选,取最大值(最宽松的经验要求)
String expStr = jobQuery.getExperience().trim();
if (expStr.contains(",")) {
Integer maxExp = StringUtil.findMaxValue(expStr);
if (maxExp != null) {
wrapper.and(a->a.le(ESJobDocument::getExperience,maxExp.toString()));
} }
} else {
wrapper.and(a->a.le(ESJobDocument::getExperience,expStr));
}
}
// 薪资范围:岗位最高薪资必须在用户筛选范围内
if(Objects.nonNull(jobQuery.getMaxSalary())){ if(Objects.nonNull(jobQuery.getMaxSalary())){
wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary())); wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary()));
} }
if(Objects.nonNull(jobQuery.getMinSalary())){ if(Objects.nonNull(jobQuery.getMinSalary())){
wrapper.and(x->x.ge(ESJobDocument::getMinSalary,jobQuery.getMinSalary())); wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,jobQuery.getMinSalary()));
} }
if(hasText(jobQuery.getScaleDictCode())){ if(hasText(jobQuery.getScaleDictCode())){
wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim())); wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim()));
@@ -684,7 +701,12 @@ public class ESJobSearchImpl implements IESJobSearchService
wrapper.and(a->a.eq(ESJobDocument::getType,jobQuery.getType().trim())); wrapper.and(a->a.eq(ESJobDocument::getType,jobQuery.getType().trim()));
} }
if(Objects.nonNull(jobQuery.getOrder())){ if(Objects.nonNull(jobQuery.getOrder())){
if (jobQuery.getOrder()==3){
// 最大薪资排序
wrapper.sort(SortBuilders.fieldSort("maxSalary").order(SortOrder.DESC).missing("_last"));
} else {
wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last"));
}
if (jobQuery.getOrder()==1){ if (jobQuery.getOrder()==1){
wrapper.orderByDesc(ESJobDocument::getIsHot); wrapper.orderByDesc(ESJobDocument::getIsHot);
wrapper.orderByDesc(ESJobDocument::getApplyNum); wrapper.orderByDesc(ESJobDocument::getApplyNum);
@@ -741,11 +763,12 @@ public class ESJobSearchImpl implements IESJobSearchService
if(hasText(jobQuery.getExperience())){ if(hasText(jobQuery.getExperience())){
wrapper.and(a->a.le(ESJobDocument::getExperience,jobQuery.getExperience().trim())); wrapper.and(a->a.le(ESJobDocument::getExperience,jobQuery.getExperience().trim()));
} }
// 薪资范围:岗位最高薪资必须在用户筛选范围内
if(Objects.nonNull(jobQuery.getMaxSalary())){ if(Objects.nonNull(jobQuery.getMaxSalary())){
wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary())); wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary()));
} }
if(Objects.nonNull(jobQuery.getMinSalary())){ if(Objects.nonNull(jobQuery.getMinSalary())){
wrapper.and(x->x.ge(ESJobDocument::getMinSalary,jobQuery.getMinSalary())); wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,jobQuery.getMinSalary()));
} }
if(hasText(jobQuery.getScaleDictCode())){ if(hasText(jobQuery.getScaleDictCode())){
wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim())); wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim()));