记录麻烦sor高亮查询

高亮查询:

public Map<String, Object> search(Map searchMap) {

        Map<String,Object> map = new HashMap<String, Object>();

        /*简单查询
        Query query = new SimpleQuery();
        //相当于select * from 4种复制域 where 查询条件 = ""
        //这句就是让前端传来的keywords来对后台的item_keywords来进行查询
        Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
        query.addCriteria(criteria);
        //分页查询,默认0开始,每页10条
        ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
        //这是我们要查询的结果
        List<TbItem> content = page.getContent();
        //塞到map
        map.put("rows",content);*/

        //1、创建一个支持高亮查询器对象
        SimpleHighlightQuery query = new SimpleHighlightQuery();
        //2、创建高亮选项对象
        HighlightOptions highlightOptions = new HighlightOptions();
        //3、设定需要高亮处理字段
        highlightOptions.addField("item_title");
        //4、设置高亮前缀
        highlightOptions.setSimplePrefix("<em style='color:red'>");
        //5、设置高亮后缀
        highlightOptions.setSimplePostfix("</em>");
        //6、关联高亮选项到高亮查询器对象
        query.setHighlightOptions(highlightOptions);

        //7、设定查询条件 根据关键字查询
        //创建查询条件对象
        Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
        //关联查询条件到查询器对象
        query.addCriteria(criteria);

        //8、发出带高亮数据查询请求
        HighlightPage<TbItem> highlightPage = solrTemplate.queryForHighlightPage(query, TbItem.class);

        //9、获取查询结果记录集合
        List<TbItem> list = highlightPage.getContent();
        //10、循环集合对象
        for (TbItem item : list) {
            //获取到针对对象TbItem高亮集合
            List<HighlightEntry.Highlight> highlights = highlightPage.getHighlights(item);
            if(highlights!=null&&highlights.size()>0) {
                //获取第一个字段高亮对象
                List<String> highlightSnipplets = highlights.get(0).getSnipplets();
                System.out.println("高亮:" + highlightSnipplets.get(0));
                //使用高亮结果替换商品标题
                item.setTitle(highlightSnipplets.get(0));

            }
        }
        map.put("rows",highlightPage.getContent());

        return map;
    }

我们测试后发现高亮显示的html代码原样输出,这是angularJS为了防止html攻击采取的安全机制。我们如何在页面上显示html的结果呢?我们会用到$sce服务的trustAsHtml方法来实现转换。

app.filter('trustHtml',['$sce',function($sce){
    return function(data){
        return $sce.trustAsHtml(data);
    }
}]);

(2)使用过滤器
ng-bind-html指令用于显示html内容
竖线 |用于调用过滤器

<div class="attr" ng-bind-html="item.title | trustHtml"></div>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值