前面说过了保存搜索记录,搜索记录展示,现在来说说删除搜索词,每一个搜索关键词都有一个id,然后再根据当前线程id,删除指定的搜索记录,如下是代码
/**
* 删除历史记录
* @param dto
* @return
*/
@Override
public ResponseResult delUserSearch(HistorySearchDto dto) {
//1.检查参数
if (dto!=null){
//2.判断是否登录
ApUser user = AppThreadLocalUtil.getUser();
if (user!=null){
//3.删除
mongoTemplate.remove(Query.query(Criteria.where("userId").is(user.getId()).and("id").is(dto.getId())),ApUserSearch.class);
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
}
return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
}
}
最后得到的效果就是
至于联想搜索,这里还是会用到mongodb,需要提前在mongodb中存入关联词数据,我这里用的代码存入
@Autowired
private MongoTemplate mongoTemplate;
//保存
@Test
public void saveTest(){
ApAssociateWords apAssociateWords = new ApAssociateWords();
apAssociateWords.setAssociateWords("今日访谈");
apAssociateWords.setCreatedTime(new Date());
mongoTemplate.save(apAssociateWords);
}
然后是根据输入的关键字,通过正则表达式匹配到结果,然后展示出结果,当然,最大条数是20条,以下是代码
@Slf4j
@Service
@AllArgsConstructor
public class ApAssociateWordsServiceImpl implements ApAssociateWordsService {
private MongoTemplate mongoTemplate;
@Override
public ResponseResult findAssociate(UserSearchDto dto) {
//1 参数检查
if (dto!=null&& StringUtils.isNotBlank(dto.getSearchWords())){
//分页检查
if (dto.getPageSize()>20){
dto.setPageSize(20);
}
//3 执行查询 模糊查询
Query query = Query.query(Criteria.where("associateWords").regex(".*?\\" + dto.getSearchWords() + ".*"));
query.limit(dto.getPageSize());
List<ApAssociateWords> wordsList = mongoTemplate.find(query, ApAssociateWords.class);
return ResponseResult.okResult(wordsList);
}
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
}
}
大家一键三连哟,您的支持是我更新的动力,谢谢