public class ItemSearchImpl implements ItemSearchService {
/**
* 搜索
*
* @param paramMap
* @return
*/
@Autowired
private SolrTemplate solrTemplate;
@Autowired
private RedisTemplate redisTemplate; @Override
public Map<String, Object> search(Map paramMap) { //获取关键字
String keywords = (String) paramMap.get("keywords");
//获取当前页
Integer pageNo = Integer.parseInt(String.valueOf(paramMap.get("pageNo")));
//每页查询多少条
Integer pageSize = Integer.parseInt(String.valueOf(paramMap.get("pageSize"))); //封装查询对象
HighlightQuery query = new SimpleHighlightQuery();
//查询的条件对象·
Criteria criteria = new Criteria("item_keywords").is(keywords);
//将查询条件放入对象
query.addCriteria(criteria);
//计算从第几页开始读
if(pageNo==null || pageNo<=0){
pageNo=1;
}
Integer start = (pageNo-1)*pageSize;
//设置从第几页查询
query.setOffset(start);
//设置每页多少条
query.setRows(pageSize);
//创建高亮显示对象
HighlightOptions highlightOptions = new HighlightOptions();
//设置哪个域需要高亮
highlightOptions.addField("item_title");
//高亮的前缀
highlightOptions.setSimplePrefix("<em style=\" color=red \">");
//高亮的后缀
highlightOptions.setSimplePostfix("</em>");
//将高亮加入到查询对象
query.setHighlightOptions(highlightOptions);
//查询并返回结果
HighlightPage<TbItem> items = solrTemplate.queryForHighlightPage(query, TbItem.class);
//获取带高亮的集合
List<HighlightEntry<TbItem>> highlighted = items.getHighlighted();
List<TbItem> itemList = new ArrayList<>();
//遍历高亮集合
for (HighlightEntry<TbItem> itemHighlightEntry: highlighted) {
TbItem item = itemHighlightEntry.getEntity();
List<HighlightEntry.Highlight> highlights = itemHighlightEntry.getHighlights(); if(highlights!=null && highlights.size()>0){
//获取高亮的标题集合
List<String> highlightTitle = highlights.get(0).getSnipplets();
if(highlightTitle!=null&&highlightTitle.size()>0){
// 获取高亮的标题
String title = highlightTitle.get(0);
item.setTitle(title);
}
}
itemList.add(item);
}
Map<String,Object> resuleMap = new HashMap<>();
//查询到的结果集
resuleMap.put("rows",itemList);
//总页数
resuleMap.put("totalPage",items.getTotalPages());
//总条数
resuleMap.put("total",items.getTotalElements());
return resuleMap; }
}

高亮显示小Demo的更多相关文章

  1. 仿百度下拉关键词,和关键词的小demo

    自己做项目时用到的仿百度下拉关键词 代码: $(function(){ var oTxt = document.getElementById('search_text'); oTxt.onkeyup ...

  2. 入门Leaflet之小Demo

    入门Leaflet之小Demo 写在前面 ---- WebGIS开发基础之Leaflet GIS基本概念:GIS.Map.Layer.Feature.Geometry.Symbol.Data(Poin ...

  3. 新手 gulp+ seajs 小demo

    首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1 ...

  4. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  5. Nancy之基于Nancy.Owin的小Demo

    前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...

  6. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  7. [Unity3D]做个小Demo学习Input.touches

    [Unity3D]做个小Demo学习Input.touches 学不如做,下面用一个简单的Demo展示的Input.touches各项字段,有图有真相. 本项目已发布到Github,地址在(https ...

  8. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

  9. Win10 FaceAPI小demo开发问题汇总

    Win10 FaceAPI小demo开发问题汇总 最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRand ...

随机推荐

  1. np.random 系列函数

    1 random()   # 产生区间 [0, 1) 均匀分布的浮点数样本值 np.random.seed(42) 2 rand(d0, d1, ..., dn)    # 产生区间 [0, 1) 均 ...

  2. 栈 队列 hash表 堆 算法模板和相关题目

    什么是栈(Stack)? 栈(stack)是一种采用后进先出(LIFO,last in first out)策略的抽象数据结构.比如物流装车,后装的货物先卸,先转的货物后卸.栈在数据结构中的地位很重要 ...

  3. 我以为我对Kafka很了解,直到我看了此文章

    Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础. 现在它已被多家不同类型的公司 ...

  4. Iconfont技术

    什么是 IconFont 顾名思义,IconFont 就是字体图标.严格地说,就是一种字体,但是,它们不包含字母或数字,而是包含符号和字形.您可以使用 CSS 设置样式,就像设置常规文本一样,这使得 ...

  5. JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(一)

    未完待续 ........ 由于SimpleDateFormat存在线程安全问题,所以在JDK1.8中使用LocalDate和LocalDateTime来进行日期的工具类使用,下边就是原创的Local ...

  6. 01-docker入门-安装docker

    注意: ubuntu 安装 docker前提是要替换好 Ubuntu 的安装源. 安装步骤: P1:    正常开始 sudo apt-get update sudo apt-get -y insta ...

  7. 安装Vyos

      Vyos是一个开源的网络操作系统,基于Debian,相对于ROS需要购买license,Vyos就更加开放的多. 下载Vyos wget http://vyos.hecint.com/iso/re ...

  8. django运行报错TypeError: object supporting the buffer API required

    运行django项目报错:TypeError: object supporting the buffer API required 解决方案: 将settings.py中数据库的密码改成字符串格式 源 ...

  9. R语言学习(基本知识)

    0)查看帮助 library(help="ballgown") #查看包帮助 getwd() #查看当前工作目录 setwd('C:/Users/djx/Desktop/信号肽系统 ...

  10. MYSQL:基于哈希的索引和基于树的索引有什么区别?

    B+树是一个平衡的多叉树.B+树从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动. 哈希索引采用一定的哈希算法,把键值换成新的哈希值,检索时不需要类似B+树那样从根节点逐级查找,只需一次哈希算法 ...