> 文档中心 > SpringDataSolr操作Solr(二)

SpringDataSolr操作Solr(二)


1、内容如下:

  1. 高亮
  2. Solr分组
  3. 综合查询(区间、条件、分类等)

2、查询列表、Solr分组、高亮显示

/** * 根据关键字搜索列表并且高亮 * @param keywords * @return */private Map searchList(Map searchMap){Map map=new HashMap();HighlightQuery query=new SimpleHighlightQuery();HighlightOptions highlightOptions=new HighlightOptions();highlightOptions.addField("item_title");//设置高亮的域highlightOptions.setSimplePrefix("");//高亮前缀 highlightOptions.setSimplePostfix("");//高亮后缀query.setHighlightOptions(highlightOptions);//设置高亮选项//按照关键字查询Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));query.addCriteria(criteria); //高亮显示 HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class); List<HighlightEntry<TbItem>> highlighted = page.getHighlighted();//高亮入口集合 for(HighlightEntry<TbItem> h: highlighted){     if(h.getHighlights().size()>0 && h.getHighlights().get(0).getSnipplets().size()>0){  TbItem item = h.getEntity();//获取原实体类  item.setTitle(h.getHighlights().get(0).getSnipplets().get(0));//设置高亮的结果     } } map.put("rows",page.getContent());}}return map;}/** * 查询分组列表  * @param searchMap * @return */private  List searchCategoryList(Map searchMap){List<String> list=new ArrayList();Query query=new SimpleQuery();//按照关键字查询Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));query.addCriteria(criteria);//设置分组选项,通过分类表示分组列表GroupOptions groupOptions=new GroupOptions().addGroupByField("item_category");query.setGroupOptions(groupOptions);//得到分组页GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query, TbItem.class);//根据列得到分组结果集GroupResult<TbItem> groupResult = page.getGroupResult("item_category");//得到分组结果入口页Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();//得到分组入口集合List<GroupEntry<TbItem>> content = groupEntries.getContent();for(GroupEntry<TbItem> entry:content){list.add(entry.getGroupValue());//将分组结果的名称封装到返回值中}return list;}

3、综合查询

    /**     * 根据关键字搜索列表     * @param searchMap     * @return     */    private Map searchList(Map searchMap){    //'searchMap'为前端传值内容封装为Map对象 Map map=new HashMap(); HighlightQuery query=new SimpleHighlightQuery(); HighlightOptions highlightOptions=new HighlightOptions(); highlightOptions.addField("item_title");//设置高亮的域 highlightOptions.setSimplePrefix("");//高亮前缀 highlightOptions.setSimplePostfix("");//高亮后缀 query.setHighlightOptions(highlightOptions);//设置高亮选项  //按照关键字查询 item_keywords为solr域中设置内容 Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords")); query.addCriteria(criteria); //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); } //1.3 价格区间 如 0-500,3003-* if(!"".equals(searchMap.get("price"))){     String[] price = ((String) searchMap.get("price")).split("-");     if(!price[0].equals("0")){//如果区间起点不等于0  Criteria filterCriteria=new Criteria("item_price").greaterThanEqual(price[0]);  FilterQuery filterQuery=new SimpleFilterQuery(filterCriteria);  query.addFilterQuery(filterQuery);     }     if(!price[1].equals("*")){//如果区间终点不等于*  Criteria filterCriteria=new  Criteria("item_price").lessThanEqual(price[1]);  FilterQuery filterQuery=new SimpleFilterQuery(filterCriteria);  query.addFilterQuery(filterQuery);     } } //1.4 分页查询 Integer pageNo= (Integer) searchMap.get("pageNo");//提取页码 if(pageNo==null){     pageNo=1;//默认第一页 } Integer pageSize=(Integer) searchMap.get("pageSize");//每页记录数 if(pageSize==null){     pageSize=20;//默认20 } query.setOffset((pageNo-1)*pageSize);//从第几条记录查询 query.setRows(pageSize); //1.5价格排序 String sortValue= (String) searchMap.get("sort");//ASC  DESC String sortField= (String) searchMap.get("sortField");//排序字段 if(sortValue!=null && !sortValue.equals("")){     if(sortValue.equals("ASC")){  Sort sort=new Sort(Sort.Direction.ASC, "item_"+sortField);  query.addSort(sort);     }     if(sortValue.equals("DESC")){  Sort sort=new Sort(Sort.Direction.DESC, "item_"+sortField);  query.addSort(sort);     } } //高亮显示 HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class); List<HighlightEntry<TbItem>> highlighted = page.getHighlighted();//高亮入口集合 for(HighlightEntry<TbItem> h: highlighted){     if(h.getHighlights().size()>0 && h.getHighlights().get(0).getSnipplets().size()>0){  TbItem item = h.getEntity();//获取原实体类  item.setTitle(h.getHighlights().get(0).getSnipplets().get(0));//设置高亮的结果     } } map.put("rows",page.getContent()); map.put("totalPages", page.getTotalPages());//返回总页数 map.put("total", page.getTotalElements());//返回总记录数 return map;    }

老江饲料商城