##Spring-Data-Solr ⑵
1.设置高亮属性 设置高亮字段 设置高亮标签
//高亮设置初始化
SimpleHighlightQuery query = new SimpleHighlightQuery();
HighlightOptions highlightOptions = new HighlightOptions().addField("item_title");//设置高亮域
highlightOptions.setSimplePrefix("<em style='color:red'>");//设置前缀
highlightOptions.setSimplePostfix("</em>");//设置后缀
query.setHighlightOptions(highlightOptions);//查询条件中设置高亮选项
2.通过高亮页入口获得所有的高亮字段(此处代码嵌套层级较深,debug一步步看容易理解)
HighlightPage<TbItem> tbItems = solrTemplate.queryForHighlightPage(query, TbItem.class);
List<HighlightEntry<TbItem>> highlighted = tbItems.getHighlighted();//高亮入口集合
for (HighlightEntry<TbItem> highlightEntry : highlighted) {
TbItem item = highlightEntry.getEntity();//获取原实体
if (highlightEntry.getHighlights().size() > 0 && highlightEntry.getHighlights().get(0).getSnipplets().size() > 0) {
item.setTitle(highlightEntry.getHighlights().get(0).getSnipplets().get(0));//替换原有集合的字段信息,设置上高亮条件(即<em style='color:red'> </em>)
}
}
3.过滤查询
if (!"".equals(searchMap.get("category"))) {
SimpleFilterQuery simpleFilterQuery = new SimpleFilterQuery();
Criteria filtercriteria = new Criteria("item_category").is(searchMap.get("category"));
simpleFilterQuery.addCriteria(filtercriteria);
query.addFilterQuery(simpleFilterQuery);
}
根据条件的多少编写过滤查询代码,格式一样
价格过滤
String[] price = ((String) searchMap.get("price")).split("-");
//价格高于设定值
Criteria filterCriteria=new Criteria("item_price").greaterThanEqual(price[0]);
//价格低于设定值
Criteria filterCriteria=new Criteria("item_price").lessThanEqual(price[1]);
4.分页
query.setOffset((pageNo - 1) * pageSize);//设置开始查询的位置
query.setRows(pageSize);//设置每页显示数据
5.排序
String sortField = (String) searchMap.get("sortField");//排序字段
String sort = (String) searchMap.get("sort");//排序方式
if (sort != null && !"".equals(sort)) {
if (sort.equals("ASC")) {
//升序
Sort sort1 = new Sort(Sort.Direction.ASC, "item_" + sortField);
query.addSort(sort1);
}
if (sort.equals("DESC")) {
//降序
Sort sort1 = new Sort(Sort.Direction.DESC, "item_" + sortField);
query.addSort(sort1);
}
}
6.springd-data-solr的实际使用
springd-data-solr是一款持久层框架,在实际使用中,使用步骤如下,具体可参考官方文档
⑴.创建dao接口实现 XXXXXRepository<TbItem,Integer>
public interface TbItemDao extends SolrCrudRepository<TbItem,Integer> {
List<TbItem> findByTitle(String title);
}
⑵.基于接口调用方法
@Test //分页实现
public void test1(){
Pageable pageable = new PageRequest(1,5);
Page<TbItem> all = tbItemDao.findAll(pageable);
System.out.println(all.getTotalElements());
}
⑶.springdata方法命名规范