solr关键字高亮显示的使用

后端:
//高亮配置   把Query 换成 HighlightQuery
HighlightQuery query = new SimpleHighlightQuery(new SimpleStringCriteria("*:*"));
//配置高亮选项
HighlightOptions highlightOptions = new HighlightOptions();
//高亮域
highlightOptions.addField("item_title");
//前缀
highlightOptions.setSimplePrefix("<span style=\"color:red;\">");
//后缀
highlightOptions.setSimplePostfix("</span>");
//设置高亮选项
query.setHighlightOptions(highlightOptions);


//高亮查询
HighlightPage<Item> highlightPage = solrTemplate.queryForHighlightPage(query, Item.class);
//获取高亮数据
List<HighlightEntry<Item>> highlighted = highlightPage.getHighlighted();
for (HighlightEntry<Item> itemHighlightEntry : highlighted) {
    //获取SKU信息
    Item item = itemHighlightEntry.getEntity();
    //获取高亮数据
    List<HighlightEntry.Highlight> highlights = itemHighlightEntry.getHighlights();
    //高亮数据
    if(highlights!=null && highlights.size()>0 && highlights.get(0).getSnipplets()!=null && highlights.get(0).getSnipplets().size()>0){
        String snipplets = highlights.get(0).getSnipplets().get(0);
        //替换高亮数据
        item.setTitle(snipplets);
    }
}

dataMap.put("rows",highlightPage.getContent());

具体代码:分页+高亮:
public Map<String, Object> search(Map searchMap) {
        //使用高亮查询
        HighlightQuery query = new SimpleHighlightQuery (new SimpleStringCriteria ("*:*"));

        highlightConfig (query);

        if (searchMap != null) {
            //如果searchMap不为null;则根据关键词进行搜索;关键词都为字符串
            String keyword = (String) searchMap.get ("keyword");
            //关键词搜索从标题、品牌、商家名字、分类名字
            if (StringUtils.isNoneBlank (keyword)) {
                //关键词不为空:创建条件进行搜索--->进行过滤搜索
                //.is表示在索引库里面搜索包含keyword的数据
                Criteria criteria = new Criteria ("item_keywords").is (keyword);

                //添加查询条件
                query.addCriteria (criteria);
            }
        }


        //设置分页展示:下标从0开始,一页显示30条数据
        query.setOffset (0);
        query.setRows (30);

        //-----------------------------------高亮域的替换显示

        //获取socredPage对象
        HighlightPage<Item> scoredPage = solrTemplate.queryForHighlightPage (query, Item.class);
        highlightReplace (scoredPage);


        //返回1:获取Item所有数据
        List<Item> itemList = scoredPage.getContent ();

        //返回2:显示多少条数据
        long totalElements = scoredPage.getTotalElements ();

        //将数据封装成Map集合进行返回
        Map<String, Object> dataMap = new HashMap<String, Object> ();
        dataMap.put ("rows", itemList);
        dataMap.put ("total", totalElements);

        return dataMap;

    }

    public void highlightConfig(HighlightQuery query) {
        HighlightOptions highlightOptions = new HighlightOptions ();

        //高亮域的设置:1 高亮域 2 前缀、后缀
        highlightOptions.addField ("item_title");
        highlightOptions.setSimplePrefix ("<span style='color:red;'>");
        highlightOptions.setSimplePostfix ("</span>");

        //将高亮配置设置到高亮选项中
        query.setHighlightOptions (highlightOptions);
    }

    public void highlightReplace(HighlightPage<Item> scoredPage) {
        //获取所有数据 所有数据,拥有[高亮]也拥有[非高亮]
        List<HighlightEntry<Item>> highlighted = scoredPage.getHighlighted ();

        //循环所有数据
        for (HighlightEntry<Item> itemHighlightEntry : highlighted) {
            //获取非高亮数据
            Item item = itemHighlightEntry.getEntity ();

            //获取高亮值 [如果只有一个高亮域,则集合中只有一条数据]
            List<HighlightEntry.Highlight> highlights = itemHighlightEntry.getHighlights ();

            if (highlights != null && highlights.size () > 0) {
                //普通高亮值
                HighlightEntry.Highlight highlight = highlights.get (0);

                //获取高亮碎片
                List<String> snipplets = highlight.getSnipplets ();

                if (snipplets!=null&&snipplets.size ()>0){
                    //获取高亮碎片
                    StringBuffer buffer = new StringBuffer ();
                    for (String snipplet : snipplets) {
                        buffer.append (snipplet);
                    }
                    //将非高亮替换成高亮
                    item.setTitle (buffer.toString ());
                }
            }
        }
    }




前端配置:----------->用于解决高亮字体不显示的问题
修改base.js
/*$sce服务写成过滤器*/
app.filter('trustHtml',['$sce',function($sce){
    return function(data){
        return $sce.trustAsHtml(data);
    }
}]);


将要显示的
<div class="attr" ng-bind-html="item.title | trustHtml">
   <em>{{item.title}}</em>
</div>

 

转载于:https://my.oschina.net/u/3963165/blog/2051183

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值