瀏覽代碼

1、实现招聘页面的关键词优化
2、招聘页面关键词查询(个人、企业)优化
3、优化已发职位的关键词检索(加入经验纬度条件)

rayson 1 年之前
父節點
當前提交
d686b6ff16

+ 21 - 9
src/main/java/com/wechat/controller/PositionController.java

@@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import com.wechat.model.requestDto.*;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -58,11 +59,6 @@ import com.wechat.model.dto.JobAdvertisedListDto;
 import com.wechat.model.dto.JobRepFormDtlDto;
 import com.wechat.model.dto.JobRepFormPvDto;
 import com.wechat.model.dto.JobViewDateViewDto;
-import com.wechat.model.requestDto.JobCollectionReq;
-import com.wechat.model.requestDto.JobFairReq;
-import com.wechat.model.requestDto.JobReportFormReq;
-import com.wechat.model.requestDto.PageReq;
-import com.wechat.model.requestDto.PositionSearchReq;
 import com.wechat.model.responseDto.DPResp;
 import com.wechat.model.responseDto.JobAdvertisedNologinResp;
 import com.wechat.model.responseDto.JobFairByHotelResp;
@@ -154,12 +150,28 @@ public class PositionController {
 	 * @param searchReq > keyWord index size
 	 * @return
 	 */
+//	@Deprecated
+//	@RequestMapping(value="searchPosition", method = RequestMethod.POST)
+//    @ResponseBody
+//    public ResultEntity<PagingResult<JobAdvertisedListDto>> searchPositionByKeyWord(@RequestBody PositionSearchReq searchReq, HttpServletRequest request){
+//		String lang = commonService.getLanguage(request);
+//		return new ResultEntity<PagingResult<JobAdvertisedListDto>>(InfoMsg.SUCCESS_REQUEST,positionService.searchPositionByKeyWord(searchReq,lang));
+//	}
+
+	/**
+	 * @description 职位关键词搜索(用户版)
+	 * @author rayson
+	 * @param searchReq 职位检索 按照关键词检索
+	 * @param request
+	 * @date 2023-09-13 14:15
+	 * @return ResultEntity<PagingResult<JobAdvertisedListDto>>
+	 **/
 	@RequestMapping(value="searchPosition", method = RequestMethod.POST)
-    @ResponseBody
-    public ResultEntity<PagingResult<JobAdvertisedListDto>> searchPositionByKeyWord(@RequestBody PositionSearchReq searchReq, HttpServletRequest request){
-		String lang = commonService.getLanguage(request);
-		return new ResultEntity<PagingResult<JobAdvertisedListDto>>(InfoMsg.SUCCESS_REQUEST,positionService.searchPositionByKeyWord(searchReq,lang));
+	@ResponseBody
+	public ResultEntity<PagingResult<JobAdvertisedListDto>> searchPositionByKeyWord(@RequestBody KeyWordReq searchReq, HttpServletRequest request){
+		return new ResultEntity<PagingResult<JobAdvertisedListDto>>(InfoMsg.SUCCESS_REQUEST,positionService.searchPositionByKeyWord(searchReq,request));
 	}
+
 	/**
 	 * 职位检索 按条件检索
 	 * @param searchReq > position addProvince addCity addArea index size

+ 10 - 0
src/main/java/com/wechat/dao/MdeJobAdvertisedDao.java

@@ -120,6 +120,16 @@ public class MdeJobAdvertisedDao extends BaseDao {
         return super.selectPagination("MdeJobAdvertisedMapper.searchJob", "MdeJobAdvertisedMapper.searchJobCount", page);
     }
 
+    /**
+     * 职位搜索
+     *
+     * @param page
+     * @return
+     */
+    public PagingResult<JobAdvertisedListDto> searchPositionByKeyWord(Pagination page) {
+        return super.selectPagination("MdeJobAdvertisedMapper.searchPositionByKeyWord", "MdeJobAdvertisedMapper.searchPositionByKeyWordCount", page);
+    }
+
     /**
      * 职位搜索 (未登录)
      *

+ 10 - 0
src/main/java/com/wechat/model/requestDto/JobAdvertisedReqDto.java

@@ -16,6 +16,8 @@ public class JobAdvertisedReqDto extends PageReq {
 
 	private Date dayEnd;  // 职位发布结束时间
 
+	private int workExperience; // 工作经验
+
 
 
 	public String getJobStatus() {
@@ -67,4 +69,12 @@ public class JobAdvertisedReqDto extends PageReq {
 		this.dayEnd = dayEnd;
 	}
 
+
+	public int getWorkExperience() {
+		return workExperience;
+	}
+
+	public void setWorkExperience(int workExperience) {
+		this.workExperience = workExperience;
+	}
 }

+ 3 - 0
src/main/java/com/wechat/service/EnterpriseService.java

@@ -16,6 +16,7 @@ import com.wechat.global.message.InfoMsg;
 import com.wechat.model.dbEntity.MdePositionCvRel;
 import com.wechat.model.dbEntity.MdeUser;
 import com.wechat.model.dto.UserInfoResp;
+import com.wechat.model.dto.WorkDateDto;
 import com.wechat.model.requestDto.*;
 import com.wechat.model.responseDto.ContactUserInfoResp;
 import com.wechat.model.responseDto.JobAdvertisedResp;
@@ -555,6 +556,8 @@ public class EnterpriseService extends BaseService {
         pageParam.put("newDelivery", jobReq.getNewDelivery());
         pageParam.put("dayStart", jobReq.getDayStart());
         pageParam.put("dayEnd", jobReq.getDayEnd());
+        pageParam.put("workExperience", jobReq.getWorkExperience());
+
         page.setParams(pageParam);
         PagingResult<JobAdvertisedResp> list = mdeJobAdvertisedDao.alreadyPublish(page);
         return list;

+ 36 - 10
src/main/java/com/wechat/service/PositionService.java

@@ -22,6 +22,9 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.wechat.model.dto.*;
+import com.wechat.model.requestDto.KeyWordReq;
+import com.wechat.model.responseDto.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -64,19 +67,9 @@ import com.wechat.model.dbEntity.MdePositionAnotherName;
 import com.wechat.model.dbEntity.MdePositionCvRel;
 import com.wechat.model.dbEntity.MdeUser;
 import com.wechat.model.dbEntity.MdeUserCv;
-import com.wechat.model.dto.City;
-import com.wechat.model.dto.JobAdvertisedListDto;
-import com.wechat.model.dto.JobRepFormDtlDto;
-import com.wechat.model.dto.JobRepFormPvDto;
-import com.wechat.model.dto.JobViewDateViewDto;
-import com.wechat.model.dto.WorkExperienceBaseDto;
 import com.wechat.model.requestDto.JobCollectionReq;
 import com.wechat.model.requestDto.PageReq;
 import com.wechat.model.requestDto.PositionSearchReq;
-import com.wechat.model.responseDto.BaseEnterpriseUserResp;
-import com.wechat.model.responseDto.DPResp;
-import com.wechat.model.responseDto.JobFairByHotelResp;
-import com.wechat.model.responseDto.LVResp;
 
 /**
  * 职位service类 职位发布者为 企业用户 职位即为发布的招聘信息
@@ -206,6 +199,7 @@ public class PositionService extends BaseService{
 	 * @param lang
 	 * @return
 	 */
+	@Deprecated
 	public PagingResult<JobAdvertisedListDto> searchPositionByKeyWord(PositionSearchReq searchReq, String lang) {
 		Pagination page = new Pagination(searchReq.getIndex(), searchReq.getSize());
 		Map<Object, Object> pageParam = new HashMap<Object, Object>();
@@ -235,6 +229,38 @@ public class PositionService extends BaseService{
 		return rest;
 	}
 
+	/**
+	 * @description 职位关键词搜索(用户版)
+	 * @author rayson
+	 * @param keyWordReq 关键词
+	 * @param req
+	 * @date 2023-09-13 14:22
+	 * @return PagingResult<JobAdvertisedListDto>
+	 **/
+	public PagingResult<JobAdvertisedListDto> searchPositionByKeyWord(KeyWordReq keyWordReq, HttpServletRequest req) {
+		if (keyWordReq != null && StringsUtils.isEmpty(keyWordReq.getKeyWord())) {
+			PagingResult<JobAdvertisedListDto> pagingResult = new PagingResult<>();
+			pagingResult.setCurrentPage(keyWordReq.getIndex());
+			pagingResult.setTotalSize(0);
+			pagingResult.setPageSize(keyWordReq.getSize());
+			pagingResult.setResultList(new ArrayList<JobAdvertisedListDto>());
+			pagingResult.setPageNoSize(10);
+			return pagingResult;
+		}
+		String language = commonService.getLanguage(req);
+
+		Pagination page = new Pagination(keyWordReq.getIndex(), keyWordReq.getSize());
+
+		Map<Object, Object> pageParam = Maps.newHashMap();
+		pageParam.put("lang", language);
+		pageParam.put("keyWord", keyWordReq.getKeyWord());
+		page.setParams(pageParam);
+
+		PagingResult<JobAdvertisedListDto> rest = jobAdvertisedDao.searchPositionByKeyWord(page);
+		//加上当日缓存中的pv
+		addJobPvTd(rest.getResultList());
+		return rest;
+	}
 	/**
 	 * 职位检索
 	 * 

+ 44 - 19
src/main/java/com/wechat/service/TalentRetrievalService.java

@@ -74,6 +74,46 @@ public class TalentRetrievalService {
 	 * @param resp
 	 * @return
 	 */
+//	@Deprecated
+//	public PagingResult<TalentRetrievalDto> searchKeyWord(KeyWordReq keyWordReq, HttpServletRequest req) {
+//		if (keyWordReq != null && StringsUtils.isEmpty(keyWordReq.getKeyWord())) {
+//			PagingResult<TalentRetrievalDto> pagingResult = new PagingResult<>();
+//			pagingResult.setCurrentPage(keyWordReq.getIndex());
+//			pagingResult.setTotalSize(0);
+//			pagingResult.setPageSize(keyWordReq.getSize());
+//			pagingResult.setResultList(new ArrayList<TalentRetrievalDto>());
+//			pagingResult.setPageNoSize(10);
+//			return pagingResult;
+//		}
+//
+//		Pagination pagination = new Pagination(keyWordReq.getIndex(), keyWordReq.getSize());
+//		String keyWord = keyWordReq.getKeyWord();
+//		// 拆分关键字
+//		// 提取字符串中的数字
+//		String regEx = "[^0-9]";
+//		Pattern p = Pattern.compile(regEx);
+//		Matcher m = p.matcher(keyWord);
+//		String number = m.replaceAll("").trim();
+//		keyWord = keyWord.replaceAll("\\d+", "");
+//		List<String> keyWordSplit = keyWordSplit(keyWord);
+//		Map<Object, Object> param = Maps.newHashMap();
+//		param.put("keyWord", keyWordSplit);
+//		String eduId = mdeUserDao.getEducationId(param);
+//		param.put("experience", number);
+//		//根据工作年限获取工作起始时间范围
+//		WorkDateDto workDate =commonService.getDateByExperience(number);
+//		param.put("from", workDate.getFrom());
+//		param.put("to", workDate.getTo());
+//
+//		param.put("eduId", eduId);
+//		param.put("publisher", commonService.getUserCode(req));
+//		pagination.setParams(param);
+//		PagingResult<TalentRetrievalDto> page = mdeUserDao.searchKeyWord(pagination);
+//		List<TalentRetrievalDto> list = commonService.addDomainUrlTalentRetrieval(page.getResultList()); // 拼接图像域名
+//		page.setResultList(list);
+//		return page;
+//	}
+
 	public PagingResult<TalentRetrievalDto> searchKeyWord(KeyWordReq keyWordReq, HttpServletRequest req) {
 		if (keyWordReq != null && StringsUtils.isEmpty(keyWordReq.getKeyWord())) {
 			PagingResult<TalentRetrievalDto> pagingResult = new PagingResult<>();
@@ -86,29 +126,14 @@ public class TalentRetrievalService {
 		}
 
 		Pagination pagination = new Pagination(keyWordReq.getIndex(), keyWordReq.getSize());
-		String keyWord = keyWordReq.getKeyWord();
-		// 拆分关键字
-		// 提取字符串中的数字
-		String regEx = "[^0-9]";
-		Pattern p = Pattern.compile(regEx);
-		Matcher m = p.matcher(keyWord);
-		String number = m.replaceAll("").trim();
-		keyWord = keyWord.replaceAll("\\d+", "");
-		List<String> keyWordSplit = keyWordSplit(keyWord);
+
 		Map<Object, Object> param = Maps.newHashMap();
-		param.put("keyWord", keyWordSplit);
-		String eduId = mdeUserDao.getEducationId(param);
-		param.put("experience", number);
-		//根据工作年限获取工作起始时间范围
-		WorkDateDto workDate =commonService.getDateByExperience(number);
-		param.put("from", workDate.getFrom());
-		param.put("to", workDate.getTo());
-		
-		param.put("eduId", eduId);
+		param.put("keyWord", keyWordReq.getKeyWord());
 		param.put("publisher", commonService.getUserCode(req));
 		pagination.setParams(param);
 		PagingResult<TalentRetrievalDto> page = mdeUserDao.searchKeyWord(pagination);
-		List<TalentRetrievalDto> list = commonService.addDomainUrlTalentRetrieval(page.getResultList()); // 拼接图像域名
+		// 拼接图像域名
+		List<TalentRetrievalDto> list = commonService.addDomainUrlTalentRetrieval(page.getResultList());
 		page.setResultList(list);
 		return page;
 	}

+ 81 - 0
src/main/resources/mybatis/MdeJobAdvertisedMapper.xml

@@ -645,6 +645,81 @@
     </select>
 
 
+    <!-- 职位关键词搜索(用户版) -->
+    <select id="searchPositionByKeyWord" resultType="com.wechat.model.dto.JobAdvertisedListDto">
+        SELECT
+        <include refid="mdeJobAdvertisedColumns"/>
+        <include refid="userColumJoin">
+        </include>
+        <include refid="areaColumJoin">
+        </include>
+        ,pos.POSITION_GRADE as positionGrade
+        ,puvView.PAGE_VIEW as pageView
+        FROM mde_job_advertised a
+        <include refid="userLeftJoin"/><!-- mde_user u -->
+        <include refid="arealeftJoin"/><!-- sys_area s1,s2,s3 -->
+        inner join MDE_POSITION pos
+        on pos.POSITION_ID = a.POSITION_ID
+        left join MDE_VIEW_JOB_PUV_ALL puvView
+        on puvView.JOB_ID = a.JOB_ID
+        <where>
+            a.del_flag = 0
+            and a.job_status = 0
+            AND u.del_flag = 0
+            AND u.IDENTITY_FLAG = 1
+            <if test="keyWord !=null">
+                AND
+                (
+                    MATCH(a.JOB_NAME, a.JOB_DESCRIBE,a.JOB_REQUIREMENT) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( u.NAME) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( s1.NAME,s1.NAME_EN) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( s2.NAME,s2.NAME_EN) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( s3.NAME,s3.NAME_EN) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                )
+                ORDER BY MATCH(a.JOB_NAME, a.JOB_DESCRIBE,a.JOB_REQUIREMENT) AGAINST(#{keyWord} IN BOOLEAN MODE) desc
+            </if>
+        </where>
+    </select>
+
+    <!-- 职位关键词搜索(用户版) 统计-->
+    <select id="searchPositionByKeyWordCount"  resultType="java.lang.Integer">
+        SELECT
+        count(1)
+        FROM mde_job_advertised a
+        <include refid="userLeftJoin"/><!-- mde_user u -->
+        <include refid="arealeftJoin"/><!-- sys_area s1,s2,s3 -->
+        inner join MDE_POSITION pos
+        on pos.POSITION_ID = a.POSITION_ID
+        left join MDE_VIEW_JOB_PUV_ALL puvView
+        on puvView.JOB_ID = a.JOB_ID
+        <where>
+            a.del_flag = 0
+            and a.job_status = 0
+            AND u.del_flag = 0
+            AND u.IDENTITY_FLAG = 1
+            <if test="keyWord !=null">
+                AND
+                (
+                    MATCH(a.JOB_NAME, a.JOB_DESCRIBE,a.JOB_REQUIREMENT) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( u.NAME) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( s1.NAME,s1.NAME_EN) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( s2.NAME,s2.NAME_EN) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                    or
+                    MATCH( s3.NAME,s3.NAME_EN) AGAINST(#{keyWord} IN BOOLEAN MODE)
+                )
+                ORDER BY MATCH(a.JOB_NAME, a.JOB_DESCRIBE,a.JOB_REQUIREMENT) AGAINST(#{keyWord} IN BOOLEAN MODE) desc
+            </if>
+        </where>
+    </select>
+
+
     <!-- 职位搜索 点击量-->
     <select id="searchJobPv" resultType="com.wechat.model.dto.JobAdvertisedListDto">
         SELECT
@@ -883,6 +958,9 @@
 			AND ad.CREATE_DATE <= #{dayEnd}
 			]]>
         </if>
+        <if test="workExperience != null and workExperience != ''">
+            AND s.label = #{workExperience}
+        </if>
     </select>
 
 
@@ -915,6 +993,9 @@
 			AND ad.CREATE_DATE <= #{dayEnd}
 			]]>
         </if>
+        <if test="workExperience != null and workExperience != ''">
+            AND s.label = #{workExperience}
+        </if>
         order by ad.JOB_STATUS,ad.RECOMMEND_FLAG desc,ad.update_date desc
     </select>
 

+ 89 - 34
src/main/resources/mybatis/MdeUserMapper.xml

@@ -951,63 +951,118 @@
 	
 	
 	<!-- 人才关键词检索 -->
+<!--	<select id="searchKeyWord" resultType="com.wechat.model.dto.TalentRetrievalDto">-->
+<!--		SELECT-->
+<!--			u.USER_CODE AS userCode,-->
+<!--			e.POSITION_TITLE AS positionTitle,-->
+<!--			TIMESTAMPDIFF( YEAR, u.FIRST_WORK, CURDATE( ) ) AS experience,-->
+<!--			u.FIRST_WORK as firstWork,-->
+<!--			u.HOTEL_BRAND_STR AS brandStr,-->
+<!--			u.HEAD_PORTRAIT AS headImage,-->
+<!--			u.NAME AS NAME,-->
+<!--			u.foreign_name as foreignName,-->
+<!--			u.identity_flag as identityFlag,-->
+<!--			min( w.EDUCATION ) as education,-->
+<!--			u.VIP_FLAG as vipFlag,-->
+<!--			e.co_name as coName-->
+<!--			FROM mde_user u-->
+<!--		LEFT JOIN mde_work_experience e ON e.USER_CODE = u.USER_CODE-->
+<!--		LEFT JOIN  mde_education_experience w ON u.USER_CODE = w.USER_CODE-->
+<!--		<where>-->
+<!--			e.DEL_FLAG = 0 AND u.DEL_FLAG = 0 AND u.IDENTITY_FLAG = 0 and u.ALLOW_FLAG = 0 AND u.WORK_STATUS != 0-->
+<!--			<if test="keyWord != null">-->
+<!--				AND-->
+<!--				<foreach collection="keyWord" item="key" open="(" close=")" separator="or">-->
+<!--					e.POSITION_TITLE LIKE CONCAT('%', #{key}, '%')-->
+<!--				</foreach>-->
+<!--			</if>-->
+<!--			<if test = "experience != null and experience != ''">-->
+<!--			 	<![CDATA[  -->
+<!--					AND u.FIRST_WORK >= #{from}  AND u.FIRST_WORK <= #{to}-->
+<!--				]]>-->
+<!--			</if>-->
+<!--			and e.SHOW_FLAG = 0-->
+<!--			AND e.CO_NAME &lt;&gt; (SELECT `NAME` FROM mde_user WHERE USER_CODE = #{publisher})-->
+<!--		</where>-->
+<!--		group by u.USER_CODE-->
+<!--		order by u.VIP_FLAG desc-->
+<!--		-->
+<!--	</select>-->
 	<select id="searchKeyWord" resultType="com.wechat.model.dto.TalentRetrievalDto">
 		SELECT
-			u.USER_CODE AS userCode,
-			e.POSITION_TITLE AS positionTitle,
-			TIMESTAMPDIFF( YEAR, u.FIRST_WORK, CURDATE( ) ) AS experience,
-			u.FIRST_WORK as firstWork,
-			u.HOTEL_BRAND_STR AS brandStr,
-			u.HEAD_PORTRAIT AS headImage,
-			u.NAME AS NAME,
-			u.foreign_name as foreignName,
-			u.identity_flag as identityFlag,
-			min( w.EDUCATION ) as education,
-			u.VIP_FLAG as vipFlag,
-			e.co_name as coName
-			FROM mde_user u
+		u.USER_CODE AS userCode,
+		e.POSITION_TITLE AS positionTitle,
+		TIMESTAMPDIFF( YEAR, u.FIRST_WORK, CURDATE( ) ) AS experience,
+		u.FIRST_WORK as firstWork,
+		u.HOTEL_BRAND_STR AS brandStr,
+		u.HEAD_PORTRAIT AS headImage,
+		u.NAME AS NAME,
+		u.foreign_name as foreignName,
+		u.identity_flag as identityFlag,
+		min( w.EDUCATION ) as education,
+		u.VIP_FLAG as vipFlag,
+		e.co_name as coName
+		FROM mde_user u
 		LEFT JOIN mde_work_experience e ON e.USER_CODE = u.USER_CODE
 		LEFT JOIN  mde_education_experience w ON u.USER_CODE = w.USER_CODE
 		<where>
 			e.DEL_FLAG = 0 AND u.DEL_FLAG = 0 AND u.IDENTITY_FLAG = 0 and u.ALLOW_FLAG = 0 AND u.WORK_STATUS != 0
 			<if test="keyWord != null">
 				AND
-				<foreach collection="keyWord" item="key" open="(" close=")" separator="or">
-					e.POSITION_TITLE LIKE CONCAT('%', #{key}, '%')
-				</foreach>
-			</if>
-			<if test = "experience != null and experience != ''">
-			 	<![CDATA[  
-					AND u.FIRST_WORK >= #{from}  AND u.FIRST_WORK <= #{to}
-				]]>
+				(
+					MATCH(e.CO_NAME,e.POSITION_TITLE) AGAINST(#{keyWord} IN BOOLEAN MODE)
+					OR
+					MATCH(u.ADDR_PROVINCE,u.ADDR_CITY,u.ADDR_AREA) AGAINST(#{keyWord} IN BOOLEAN MODE)
+				)
 			</if>
 			and e.SHOW_FLAG = 0
 			AND e.CO_NAME &lt;&gt; (SELECT `NAME` FROM mde_user WHERE USER_CODE = #{publisher})
 		</where>
 		group by u.USER_CODE
 		order by u.VIP_FLAG desc
-		
+
 	</select>
 	
+<!--	<select id="searchKeyWordCount" resultType="java.lang.Integer">-->
+<!--		SELECT -->
+<!--			count(DISTINCT u.USER_CODE)-->
+<!--		FROM mde_user u-->
+<!--		LEFT JOIN mde_work_experience e ON e.USER_CODE = u.USER_CODE-->
+<!--		LEFT JOIN  mde_education_experience w ON u.USER_CODE = w.USER_CODE-->
+
+<!--		<where>-->
+<!--			e.DEL_FLAG = 0 AND u.DEL_FLAG = 0 AND u.IDENTITY_FLAG = 0 and u.ALLOW_FLAG = 0 and u.WORK_STATUS != 0-->
+<!--			<if test="keyWord != null">-->
+<!--				AND-->
+<!--				<foreach collection="keyWord" item="key" open="(" close=")" separator="or">-->
+<!--					e.POSITION_TITLE LIKE CONCAT('%', #{key}, '%')-->
+<!--				</foreach>-->
+<!--			</if>-->
+<!--			<if test = "experience != null and experience != ''">-->
+<!--			 	<![CDATA[  -->
+<!--					AND u.FIRST_WORK >= #{from}  AND u.FIRST_WORK <= #{to}-->
+<!--				]]>-->
+<!--			</if>-->
+<!--			and e.SHOW_FLAG = 0-->
+<!--			AND e.CO_NAME &lt;&gt; (SELECT `NAME` FROM mde_user WHERE USER_CODE = #{publisher})-->
+<!--		</where>-->
+<!--	</select>-->
+
 	<select id="searchKeyWordCount" resultType="java.lang.Integer">
-		SELECT 
-			count(DISTINCT u.USER_CODE)
+		SELECT
+		count(DISTINCT u.USER_CODE)
 		FROM mde_user u
 		LEFT JOIN mde_work_experience e ON e.USER_CODE = u.USER_CODE
 		LEFT JOIN  mde_education_experience w ON u.USER_CODE = w.USER_CODE
-
 		<where>
-			e.DEL_FLAG = 0 AND u.DEL_FLAG = 0 AND u.IDENTITY_FLAG = 0 and u.ALLOW_FLAG = 0 and u.WORK_STATUS != 0
+			e.DEL_FLAG = 0 AND u.DEL_FLAG = 0 AND u.IDENTITY_FLAG = 0 and u.ALLOW_FLAG = 0 AND u.WORK_STATUS != 0
 			<if test="keyWord != null">
 				AND
-				<foreach collection="keyWord" item="key" open="(" close=")" separator="or">
-					e.POSITION_TITLE LIKE CONCAT('%', #{key}, '%')
-				</foreach>
-			</if>
-			<if test = "experience != null and experience != ''">
-			 	<![CDATA[  
-					AND u.FIRST_WORK >= #{from}  AND u.FIRST_WORK <= #{to}
-				]]>
+				(
+					MATCH(e.CO_NAME,e.POSITION_TITLE) AGAINST(#{keyWord} IN BOOLEAN MODE)
+					OR
+					MATCH(u.ADDR_PROVINCE,u.ADDR_CITY,u.ADDR_AREA) AGAINST(#{keyWord} IN BOOLEAN MODE)
+				)
 			</if>
 			and e.SHOW_FLAG = 0
 			AND e.CO_NAME &lt;&gt; (SELECT `NAME` FROM mde_user WHERE USER_CODE = #{publisher})