solr搜索_商品分类_品牌列表_规格列表的实现思路和步骤

第一步: 事先我们已经将itemCat表中的数据放入了solr中,所以这里可以直接使用solr的分组查询,查询商品分类数据

 

 

第二步: 将商品分类表全部缓存进redis数据库中

缓存的形式是map类型  大key=itemcat     小key=name      value=type_id     思路还是一样先从mysql数据库查出来,然后存入redis数据库中

    List<TbItemCat> list = findAll();  //mysql查出来
    for(TbItemCat itemCat:list){       //redis存进去
        redisTemplate.boundHashOps("itemCat").put(itemCat.getName(), itemCat.getTypeId());
    }

 

@Autowired
private RedisTemplate redisTemplate;

/**
 * 根据上级ID查询列表
 */
@Override
public List<TbItemCat> findByParentId(Long parentId) {        
    TbItemCatExample example1=new TbItemCatExample();
    Criteria criteria1 = example1.createCriteria();
    criteria1.andParentIdEqualTo(parentId);
    //每次执行查询的时候,一次性读取缓存进行存储 (因为每次增删改都要执行此方法)
    List<TbItemCat> list = findAll();
    for(TbItemCat itemCat:list){
        redisTemplate.boundHashOps("itemCat").put(itemCat.getName(), itemCat.getTypeId());
    }
    System.out.println("更新缓存:商品分类表");
    return  itemCatMapper.selectByExample(example1);        
}

 

第三步:  缓存品牌数据和规格数据(第三列规格,第四列品牌)

第三列,第四列都是数组,需要先将数组转换成List<Map>类型,这样便于放入redis数据库中

存储形式是  大key =brandList     小key=id(type_id)     value=brandIds是一个List<Map> 类型的

redisTemplate.boundHashOps("brandList").put(typeTemplate.getId(), brandList);

 List<Map> specList = findSpecList(typeTemplate.getId());  这里面封装了规格和规格选项的内容,跟brandList一样,也需要封装让如redis缓存中

@Autowired
private RedisTemplate redisTemplate;

/**
 * 将数据存入缓存
 */
private void saveToRedis(){
    //获取模板数据
    List<TbTypeTemplate> typeTemplateList = findAll();
    //循环模板
    for(TbTypeTemplate typeTemplate :typeTemplateList){                
        //存储品牌列表        
        List<Map> brandList = JSON.parseArray(typeTemplate.getBrandIds(), Map.class);            
        redisTemplate.boundHashOps("brandList").put(typeTemplate.getId(), brandList);
        //存储规格列表
        List<Map> specList = findSpecList(typeTemplate.getId());//根据模板ID查询规格列表
        redisTemplate.boundHashOps("specList").put(typeTemplate.getId(), specList);        
    }
}

 

然后只要运营商页面执行后,就可以将相关数据放入redis数据库中.

 

第四步:显示品牌和规格数据

itemcat   brandList和   speList 数据现在已经全部都在redis中了

现在整个思路就是根据 关键字Keywords------->查询到商品分类名称----------->查询到模板id-------->查询到品牌列表  和  规格列表

@Autowired
private RedisTemplate redisTemplate;

/**
     * 查询品牌和规格列表
     * @param category 分类名称
     * @return
     */
private Map searchBrandAndSpecList(String category){
    Map map=new HashMap();        
    Long typeId = (Long) redisTemplate.boundHashOps("itemCat").get(category);//获取模板ID
    if(typeId!=null){
        //根据模板ID查询品牌列表 
        List brandList = (List) redisTemplate.boundHashOps("brandList").get(typeId);
        map.put("brandList", brandList);//返回值添加品牌列表
        //根据模板ID查询规格列表
        List specList = (List) redisTemplate.boundHashOps("specList").get(typeId);
        map.put("specList", specList);                
    }            
    return map;
}

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值