spring data solr 搜索关键字高亮显示

public Map<String, Object> highSearch(Map searchMap) {
Map map = new HashMap<>();
SimpleHighlightQuery query = new SimpleHighlightQuery(); HighlightOptions highlightOptions = new HighlightOptions().addField("item_title");//设置高亮域
highlightOptions.setSimplePrefix("<em style='color:red'>"); //设置高亮前缀
highlightOptions.setSimplePostfix("</em>"); //设置高亮后缀
query.setHighlightOptions(highlightOptions); //设置高亮显示 //1.按照关键字查询
Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
//2.按分类筛选
if(!"".equals(searchMap.get("category"))){
Criteria filterCriteria = new Criteria("item_category").is(searchMap.get("category"));
FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);
query.addFilterQuery(filterQuery);
}
//3.按品牌筛选
if(!"".equals(searchMap.get("brand"))){
Criteria filterCriteria = new Criteria("item_brand").is(searchMap.get("brand"));
FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);
query.addFilterQuery(filterQuery);
}
//4.按规格筛选
if (searchMap.get("spec") != null){
Map<String,String> specMap = (Map<String, String>) searchMap.get("spec");
for (String key : specMap.keySet()) {
Criteria filtercriteria = new Criteria("item_spec_" + key).is(specMap.get(key));
FilterQuery filterQuery = new SimpleFilterQuery(filtercriteria);
query.addFilterQuery(filterQuery);
}
} //设置查询条件
Integer pageNo = (Integer) searchMap.get("pageNo"); //获取页数
Integer pageSize = (Integer) searchMap.get("pageSize"); //获取每页记录数
query.setOffset((pageNo-1) * pageSize); //设置开始查找的索引
query.setRows(pageSize); //设置每页记录数 //用于存储修改高亮显示后的记录
List<Item> list = new ArrayList<>(); HighlightPage<Item> page = solrTemplate.queryForHighlightPage(query, Item.class);
for (HighlightEntry<Item> highlightEntry : page.getHighlighted()) {
Item item = highlightEntry.getEntity();
List<HighlightEntry.Highlight> highlights = highlightEntry.getHighlights();
if(highlights != null && highlights.size() > 0){
//获取高亮的标题集合
List<String> titles = highlights.get(0).getSnipplets();
if(titles !=null && titles.size() > 0){
//获取高亮的标题
item.setTitle(titles.get(0));
}
}
list.add(item);
} map.put("rows", list );
map.put("total", page.getTotalElements());
map.put("totalPages", page.getTotalPages()); return map;
}

spring data solr 搜索关键字高亮显示的更多相关文章

  1. Spring Data Solr教程(翻译) 开源的搜索服务器

    Solr是一个使用开源的搜索服务器,它采用Lucene Core的索引和搜索功能构建,它可以用于几乎所有的编程语言实现可扩展的搜索引擎. Solr的虽然有很多优点,建立开发环境是不是其中之一.此博客条 ...

  2. Spring Data Solr —— 快速入门

    Solr是基于Lucene(全文检索引擎)开发,它是一个独立系统,运行在Tomcat或Jetty(solr6以上集成了jetty,无需再部署到servlet容器上),但其原生中文的分词词功能不行,需要 ...

  3. Solr学习笔记(5)—— Spring Data Solr入门

    一.Spring Data Solr简介 前面已经介绍了通过solrJ来操作solr,那么我们如何将Solr的应用集成到Spring中?Spring Data Solr就是为了方便Solr的开发所研制 ...

  4. Spring Data Solr操作solr的简单案例

    Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便 ...

  5. Solr和Spring Data Solr

    一.Solr概述与安装 1.Solr简介 Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的.Solr可以和Had ...

  6. Spring Data Solr教程(翻译)

    大多数应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能 这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意,Apache Solr ...

  7. Spring Data Solr

    1.什么是spring data solr? Solr是一个开源搜索平台,用于构建搜索应用程序.简单的来说就是作为一个搜索引擎使用. 2.solr的安装(本地安装,远程安装同) 1)解压一个tomca ...

  8. Spring Data Solr相关配置

    1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</ ...

  9. 记录一次Spring Data Solr相关的错误解决

    记录一次Spring Data Solr相关的错误解决 生活本不易,流人遂自安 相信大家也使用过SpringDataSolr,但是在最新版的SpringDataSolr 4.0.5 RELEASE中有 ...

随机推荐

  1. 六、ARM 寻址方式

    寻址方式是针对源操作数来说的 6.1 立即数寻址 源操作数是立即数 立即数:操作码以 # 号开头的数字为立即数 立即数寻址: MOV   R0, #0x300 伪指令:        LDR   R0 ...

  2. 图解NuGet服务器搭建和使用过程

    听语音 浏览:0 | 更新:2017-10-31 09:13 | 标签:服务器 1 2 3 4 5 6 7 分步阅读 本篇经验将和大家介绍内网搭建NuGet服务器的步骤,希望对大家的工作和学习有所帮助 ...

  3. B1016. 部分 A+B

    题目描述 正整数A的"D(为1位整数)部分"定义由A中所有D组成的新整数P,例如给定A=3862767,D=6,则A的"6部分" P是66,因为A中有2个6,现 ...

  4. 【leetcode】493. Reverse Pairs

    题目如下: 解题思路:本题要求的是数组每个元素和所有排在这个元素后面的元素的值的二倍做比较.我们可以先把数组所有元素的二倍都算出来,存入一个新的数组newlist,并按升序排好.而后遍历nums数组的 ...

  5. Serverless 实战 —— 函数计算 + Typescript 实践

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

  6. HDU - 6578 Blank DP + 滚动数组

    HDU - 6578 Blank 题意 给你\(\{0,1,2, 3\}\)四个数,分别填入长度为\(n\)的数列中,有\(m\)个限制条件,\(l_{i}, r_{i}, x_{i}\)表示在\([ ...

  7. lunwenzhunbei

    1,android sensors introduction http://developer.android.com/guide/topics/sensors/sensors_overview.ht ...

  8. 接上SQL SERVER的锁机制(一)——概述(锁的种类与范围)

    二.完整的锁兼容性矩阵(见下图) 对上图的是代码说明:见下图. 三.下表列出了数据库引擎可以锁定的资源. 名称 资源 缩写 编码 呈现锁定时,描述该资源的方式 说明 数据行 RID RID 9 文件编 ...

  9. 自定义类实现原生SQL的GROUP_CONCAT的功能

    大家都知道,原生的SQL为我们提供了分组之后查找组内数据的办法:GROUP_CONCAT方法:但是对于用Django开发的程序员来说-Django自带的ORM并没有内置这样功能的方法,而每一次遇到这样 ...

  10. Linux内核调试方法总结之反汇编

    Linux反汇编调试方法 Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类 ...