solr的搜索应用

solr的高亮搜索

步骤:
1.获取搜索的关键字
String keywords = (String) searchMap.get("keywords");	

2.根据关键字进行查询
	Criteria criteria = new Criteria("item_keywords");
        criteria.contains(keywords);
        query.addCriteria(criteria);
      
3.高亮搜索设置
HighlightOptions options = new HighlightOptions(); // 声明高亮选项
		options.addField("item_title"); // 设置需要高亮的域
		options.setSimplePrefix("<em style='color:red'>"); // 高亮头部
		options.setSimplePostfix("</em>"); // 高亮尾部
		SimpleHighlightQuery query = new SimpleHighlightQuery();
		query.setHighlightOptions(options);
		
4.增加过滤条件
 String category = (String) searchMap.get("category");	//获取过滤条件的关键字
            if (category != null && category.trim().length() > 0) {	
                Criteria qcriteria = new Criteria("item_category");	// 过滤item_category这个域
                qcriteria.contains(category);					// 域里包含过滤关键字
                SimpleFilterQuery filterQuery = new SimpleFilterQuery(qcriteria);
                query.addFilterQuery(filterQuery);
                System.out.println("添加了分类过滤"+category);
            }

5.升降序查询
        String sortStr = (String) searchMap.get("sort");		// 获取升降排序 的关键字
        if ("ASC".equals(sortStr)) {
            Sort orders = new Sort(Sort.Direction.ASC, "item_price");	// 根据item_price升序排序
            query.addSort(orders);
        } else {
            Sort orders = new Sort(Sort.Direction.DESC, "item_price");	//  根据item_price降序排序
            query.addSort(orders);
        }

6. 分页
        Integer pageNo  = (Integer) searchMap.get("pageNo");	//从前端获取传来的页码数
        Integer PageSize = (Integer) searchMap.get("pageSize");	// 获取前端传来的每页几条数据
        query.setOffset((pageNo-1)*PageSize);   // 从第几条记录开始查询	
        query.setRows(PageSize);    // 每页查询几条

7. 通过高亮进行查询
        HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);  // 一定要在封装查询关键字和设置过滤关键字后查询。
        List <TbItem> returnItems = page.getContent();		// 查询的结果封装为一个list集合
8. 获取封装的高亮的数据,设置item_title高亮
 for (TbItem item : returnItems) {
            //一定要判断当前的集合不为空,否则会崩
            if(page.getHighlights(item)!=null && page.getHighlights(item).size() > 0){
                List<HighlightEntry.Highlight> highlights = page.getHighlights(item);
                HighlightEntry.Highlight highlight = highlights.get(0);
                List<String> snipplets = highlight.getSnipplets();
                if(snipplets!=null && snipplets.size() > 0){
                    item.setTitle(snipplets.get(0)); //将前后修饰的高亮内容再次封装回item的title中
                }
            }
        }
        
  9.返回数据到前端
  Map returnMap  = new HashMap<>();
    returnMap.put("content", returnItems);
        //需要封装总页数
        returnMap.put("total", page.getTotalElements());//设置返回值中的总记录数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值