我们先来看一下solr页面是怎么设置的,
然后看一下结果
通过结果我们可以发现,高亮字段和查询的普通字段是分开的,所以,在java代码中要想融合高亮进入 ,第一步:查出高亮, 第二步:将普通字段替换为高亮字段
下面代码书写顺序是从下往上,需要什么创建什么
public Map searchList(Map searchMap){
Map<String, Object> map = new HashMap<>();
//2 封装高亮条件
HighlightQuery query=new SimpleHighlightQuery();
HighlightOptions highlightOptions=new HighlightOptions() ;
highlightOptions.addField("item_title");
highlightOptions.setSimplePrefix("<em style='color: red'>");
highlightOptions.setSimplePostfix("</em>");
query.setHighlightOptions(highlightOptions);
//3 按照关键字查询,解析参数searchMap,获取搜索框的内容
Object keywords = searchMap.get("keywords");
Criteria criteria = new Criteria("item_keywords").is(keywords);
query.addCriteria(criteria);
//1 获取高亮页面(主方法)
HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);
// 4 得到高亮页面的page后就可以使用遍历获取里面的内容了
遍历的话看着solr网页的遍历比较方便,因为高亮的page页有一个方法getEntity(), 所以直接可以set进去拿到最终的高亮段落
接下来看看前端是怎么做的?
前端因为担心网页注入,所以后端写的html代码,前端是不会显示的,只有在前端增加过滤器,才可以
/*$sce服务写成过滤器*/
app.filter('trustHtml',['$sce',function($sce){
return function(data){
return $sce.trustAsHtml(data);
}
}]);
然后前端html页面使用一下过滤器,那么后端java写的html就可以显示在页面了
(2)使用过滤器
ng-bind-html指令用于显示html内容
竖线 |用于调用过滤器
<div class="attr" ng-bind-html="item.title | trustHtml"></div>