首页 > 编程语言 > 详细

spring data solr 搜索关键字高亮显示

时间:2019-11-23 15:19:20      阅读:71      评论:0      收藏:0      [点我收藏+]

spring data solr 搜索关键字高亮显示

public Map<String, Object> highSearch(Map searchMap) {
        Map map = new HashMap<>();
        SimpleHighlightQuery query = new SimpleHighlightQuery();

        HighlightOptions highlightOptions = new HighlightOptions().addField("item_title");//设置高亮域
        highlightOptions.setSimplePrefix("<em style=‘color:red‘>");         //设置高亮前缀
        highlightOptions.setSimplePostfix("</em>");                           //设置高亮后缀
        query.setHighlightOptions(highlightOptions);                           //设置高亮显示

        //1.按照关键字查询
        Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
        query.addCriteria(criteria);
        //2.按分类筛选
        if(!"".equals(searchMap.get("category"))){
            Criteria filterCriteria = new Criteria("item_category").is(searchMap.get("category"));
            FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);
            query.addFilterQuery(filterQuery);
        }
        //3.按品牌筛选
        if(!"".equals(searchMap.get("brand"))){
            Criteria filterCriteria = new Criteria("item_brand").is(searchMap.get("brand"));
            FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);
            query.addFilterQuery(filterQuery);
        }
        //4.按规格筛选
        if (searchMap.get("spec") != null){
            Map<String,String> specMap = (Map<String, String>) 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);
            }
        }

        //设置查询条件
        Integer pageNo = (Integer) searchMap.get("pageNo");     //获取页数
        Integer pageSize = (Integer) searchMap.get("pageSize"); //获取每页记录数
        query.setOffset((pageNo-1) * pageSize);                 //设置开始查找的索引
        query.setRows(pageSize);                                //设置每页记录数

        //用于存储修改高亮显示后的记录
        List<Item> list = new ArrayList<>();

        HighlightPage<Item> page = solrTemplate.queryForHighlightPage(query, Item.class);
        for (HighlightEntry<Item> highlightEntry : page.getHighlighted()) {
            Item item = highlightEntry.getEntity();
            List<HighlightEntry.Highlight> highlights = highlightEntry.getHighlights();
            if(highlights != null && highlights.size() > 0){
                //获取高亮的标题集合
                List<String> titles = highlights.get(0).getSnipplets();
                if(titles !=null && titles.size() > 0){
                    //获取高亮的标题
                    item.setTitle(titles.get(0));
                }
            }
            list.add(item);
        }

        map.put("rows", list );
        map.put("total", page.getTotalElements());
        map.put("totalPages", page.getTotalPages());

        return map;
    }

 

 

spring data solr 搜索关键字高亮显示

原文:https://www.cnblogs.com/lulli/p/11917980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!