|
@@ -8,20 +8,25 @@ import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
|
|
|
import com.aliyun.opensearch.sdk.generated.search.DeepPaging;
|
|
|
import com.aliyun.opensearch.sdk.generated.search.SearchParams;
|
|
|
import com.caimei365.commodity.components.PriceUtilService;
|
|
|
+import com.caimei365.commodity.components.RedisService;
|
|
|
import com.caimei365.commodity.components.SearchOpenService;
|
|
|
import com.caimei365.commodity.mapper.PageMapper;
|
|
|
+import com.caimei365.commodity.mapper.SearchFrequencyMapper;
|
|
|
import com.caimei365.commodity.mapper.SearchMapper;
|
|
|
import com.caimei365.commodity.model.ResponseJson;
|
|
|
import com.caimei365.commodity.model.po.SearchHistoryPo;
|
|
|
import com.caimei365.commodity.model.search.ProductListVo;
|
|
|
import com.caimei365.commodity.model.vo.HotSearchVo;
|
|
|
import com.caimei365.commodity.model.vo.PaginationVo;
|
|
|
+import com.caimei365.commodity.model.vo.SearchFrequencyVo;
|
|
|
+import com.caimei365.commodity.model.vo.SearchKeywordyVo;
|
|
|
import com.caimei365.commodity.service.SearchProductService;
|
|
|
import com.caimei365.commodity.utils.AppletsLinkUtil;
|
|
|
import com.caimei365.commodity.utils.Json2PojoUtil;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -51,6 +56,11 @@ public class SearchProductServiceImpl implements SearchProductService {
|
|
|
@Resource
|
|
|
private PriceUtilService priceUtilService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private SearchFrequencyMapper searchFrequencyMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisService redisService;
|
|
|
/**
|
|
|
* 根据关键词搜索商品
|
|
|
*
|
|
@@ -595,4 +605,77 @@ public class SearchProductServiceImpl implements SearchProductService {
|
|
|
});
|
|
|
return productHotSearch;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 统计关键词及次数
|
|
|
+ * @param fromType
|
|
|
+ * @param path
|
|
|
+ * @param keyword
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResponseJson conKeyword(Integer fromType,String path,String keyword){
|
|
|
+ Date date=new Date();
|
|
|
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ sf.format(date);
|
|
|
+ //根据关键词和来源查询数据库是否存在(存在来源也相同时增加次数,存在但来源不同时和不存在则新增)
|
|
|
+ List<SearchFrequencyVo> searchFrequencyVoList = searchFrequencyMapper.getInfoBykeyword(keyword,fromType);
|
|
|
+ if(null!= searchFrequencyVoList && searchFrequencyVoList.size()>0){
|
|
|
+ //存在 统计次数
|
|
|
+ Integer frequency= searchFrequencyVoList.get(0).getFrequency()+1;
|
|
|
+ searchFrequencyMapper.upFrequencyById(searchFrequencyVoList.get(0).getId(),frequency);
|
|
|
+ }else{
|
|
|
+ //不存在 新增
|
|
|
+ SearchFrequencyVo sea=new SearchFrequencyVo();
|
|
|
+ sea.setKeyword(keyword);
|
|
|
+ sea.setFrequency(1);
|
|
|
+ sea.setPath(path);
|
|
|
+ sea.setFromSearch(fromType);
|
|
|
+ sea.setSearchTime(new java.sql.Date(date.getTime()));
|
|
|
+ searchFrequencyMapper.saveInfo(sea);
|
|
|
+ }
|
|
|
+ return ResponseJson.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取已加入关键词库的关键词进行搜索联动
|
|
|
+ * 从redis获取,获取不到则去数据库获取
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<SearchKeywordyVo> getKeywordList(String keyword){
|
|
|
+ //先从reids中获取keyword值,不存在时在查询数据库
|
|
|
+ List<SearchKeywordyVo> searchFrequencyVos=new ArrayList<>();
|
|
|
+ if(redisService.getExpireTime(keyword)>0){
|
|
|
+ log.info("-------------获取redis中的数据--------------");
|
|
|
+ searchFrequencyVos= com.alibaba.fastjson.JSONArray.parseArray(redisService.get(keyword).toString(),SearchKeywordyVo.class);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ log.info("-------------获取数据库中的数据--------------");
|
|
|
+ searchFrequencyVos = searchFrequencyMapper.getKeywordList(keyword);
|
|
|
+ }
|
|
|
+ return searchFrequencyVos;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * redis缓存关键词(把所有的关键词整合到一个字符串中)
|
|
|
+ * 用时从redis取出转成list集合返回给前端进行联动
|
|
|
+ */
|
|
|
+ public void conKeyWord(){
|
|
|
+ List<SearchKeywordyVo> keywordList = searchFrequencyMapper.getKeywordList(null);
|
|
|
+ for (SearchKeywordyVo searchFrequency:keywordList) {
|
|
|
+ String str=searchFrequency.getKeyword();
|
|
|
+ String key="";
|
|
|
+ for(int i=0;i<str.length();i++){
|
|
|
+ key+=str.charAt(i);
|
|
|
+ List<SearchKeywordyVo> searchFrequencyVos = searchFrequencyMapper.getvalueList(key);
|
|
|
+ String keyword = com.alibaba.fastjson.JSONObject.toJSONString(searchFrequencyVos);//有值的字段才转
|
|
|
+ redisService.set(key,keyword,60L * 60 * 24 * 30);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println(redisService.getExpireTime("恩"));
|
|
|
+ System.out.println(redisService.get("恩"));
|
|
|
+ System.out.println(redisService.getExpireTime("光"));
|
|
|
+ System.out.println(redisService.get("光"));
|
|
|
+// System.out.println(redisService.getExpireTime("keyword"));
|
|
|
+// String key=redisService.get("keyword").toString();
|
|
|
+// System.out.println(key);
|
|
|
+ }
|
|
|
}
|