过滤查询 7.1 需求分析 根据上一步构建的查询条件,实现分类、品×××和规格的过滤查询 7.1 代码实现 7.1.1 分类过滤 修改 pinyougou-search-service 工程的 SearchItemServiceImpl.java

/**
 
*根据关键字搜索列表
 
*@param  keywords
 
 
*@return
 
 
*/
 
 
private  Map  searchList(Map  searchMap){
 
 
.......
//1.1 关键字查询......
 
//1.2 按分类筛选
if(!"".equals(searchMap.get("category"))){ Criteria  filterCriteria=new
Criteria("item_category").is(searchMap.get("category"));
 
 
FilterQuery  filterQuery=new  SimpleFilterQuery(filterCriteria); query.addFilterQuery(filterQuery);
}
 
//高亮显示处理.....
 
}

7.1.1 品×××过滤 修改 pinyougou-search-service 工程的 SearchItemServiceImpl.java

/**
 
*根据关键字搜索列表
 
*@param  keywords
 
 
*@return
 
 
*/
 
 
private  Map  searchList(Map  searchMap){
 
 
.......
 
//1.1 关键字查询
 
.......
 
//1.2 按分类筛选
 
.......
 
//1.3 按品×××筛选
if(!"".equals(searchMap.get("brand"))){ Criteria  filterCriteria=new
Criteria("item_brand").is(searchMap.get("brand"));
FilterQuery  filterQuery=new  SimpleFilterQuery(filterCriteria); query.addFilterQuery(filterQuery);
}
 
//高亮显示处理...............
 
}

7.1.1 规格过滤 实现思路:规格有多项,需要循环过滤。循环规格查询条件,根据 key 得到域名城,根据 value 设置过滤条件。 修改 pinyougou-search-service 工程的 SearchItemServiceImpl.java

/**
 
*根据关键字搜索列表
 
*@param  keywords
 
 
*@return
 
 
*/
 
 
private  Map  searchList(Map  searchMap){
 
 
......
 
//1.1 关键字查询
 
....
 
//1.2 按分类筛选
 
.....
 
//1.3 按品×××筛选
 
......
 
//1.4 过滤规格
if(searchMap.get("spec")!=null){
 
 
Map<String,String>  specMap=  (Map)  searchMap.get("spec");
 
 
for(String  key:specMap.keySet()  ){
 
 
Criteria  filterCriteria=new  Criteria("item_spec_"+key).is(  specMap.get(key)  ); FilterQuery  filterQuery=new  SimpleFilterQuery(filterCriteria); query.addFilterQuery(filterQuery);
}
 
 
}
 
//高亮显示处理.....
 
}

根据分类查询品×××规格列表

@Override
 
public  Map<String,  Object>  search(Map  searchMap)  { Map<String,Object>  map=new  HashMap<>();
//1.按关键字查询(高亮显示)
 
......
 
//2.根据关键字查询商品分类
 
......
 
//3.查询品×××和规格列表
 
String  categoryName=(String)searchMap.get("category");
 
if(!"".equals(categoryName)){//如果有分类名称
map.putAll(searchBrandAndSpecList(categoryName));
 
}else{//如果没有分类名称,按照第一个查询
 
if(categoryList.size()>0){ map.putAll(searchBrandAndSpecList(categoryList.get(0)));
}
 
 
}
 
 
return  map;
 
 
}