1.高亮显示
1.后端代码
private Map searchList(Map searchMap){
Map map=new HashMap();
HighlightQuery query=new SimpleHighlightQuery();
HighlightOptions highlightOptions=new HighlightOptions().addField("item_title");//设置高亮的域
highlightOptions.setSimplePrefix("<em style='color:red'>");//高亮前缀
highlightOptions.setSimplePostfix("</em>");//高亮后缀
query.setHighlightOptions(highlightOptions);//设置高亮选项
//按照关键字查询
Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);
for(HighlightEntry<TbItem> h: page.getHighlighted()){//循环高亮入口集合 返回的记录数
TbItem item = h.getEntity();//获取原实体类
h.getHighlights()//高亮选项 多个字段 item_title
h.getHighlights().get(0).getSnipplets()//高亮的值 多值
if(h.getHighlights().size()>0 && h.getHighlights().get(0).getSnipplets().size()>0){
item.setTitle(h.getHighlights().get(0).getSnipplets().get(0));//设置高亮的结果
}
}
map.put("rows",page.getContent());
return map;
}
2.前端默认html代码原样显示,这是angularJS为了防止html攻击采取的安全机制,需要用到$sce服务的trustAsHtml方法来实现转换。
使用过滤器简化:
// 定义模块:
var app = angular.module("pinyougou",[]);
/*$sce服务写成过滤器*/
app.filter('trustHtml',['$sce',function($sce){
return function(data){
return $sce.trustAsHtml(data);
}
}]);
调用过滤器:
<div class="attr" ng-bind-html="item.title | trustHtml">
<em style=’colore :red’>xxxx</em>
</div>
ng-bind-html指令用于显示html内容。
2.分组搜索
private List searchCategoryList(Map searchMap){
List<String> list=new ArrayList();
Query query=new SimpleQuery();
//按照关键字查询
Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
//设置分组选项
GroupOptions groupOptions=new GroupOptions().addGroupByField("item_category");
query.setGroupOptions(groupOptions);
//得到分组页
GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query, TbItem.class);
//根据列得到分组结果集
GroupResult<TbItem> groupResult = page.getGroupResult("item_category");
//得到分组结果入口页
Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();
//得到分组入口集合
List<GroupEntry<TbItem>> content = groupEntries.getContent();
for(GroupEntry<TbItem> entry:content){
list.add(entry.getGroupValue());//将分组结果的名称封装到返回值中
}
return list;
}
补:
$scope.searchMap={'spec':{}};//搜索对象
$scope.searchMap.spec[key]=value;//赋值
delete $scope.searchMap.spec[key]; //移除此属性
3.过滤查询
private Map searchList(Map searchMap){
.......
//1.1关键字查询......
//1.2按分类筛选
if(!"".equals(searchMap.get("category"))){
Criteria filterCriteria=new Criteria("item_category").is(searchMap.get("category"));
FilterQuery filterQuery=new SimpleFilterQuery(filterCriteria);
query.addFilterQuery(filterQuery);
}
//高亮显示处理.....
}
创建过滤器加入条件,进行查询