后端实现:

@Service
public class ItemSearchServiceImpl implements ItemSearchService {
@Autowired
private SolrTemplate solrTemplate; @Override
public Map<String, Object> search(Map searchMap) {
Map<String,Object> map=new HashMap<>(); //1.查询列表
Map searchListMap = searchList(searchMap); map.putAll(searchListMap);
return map;
} /**
* 根据关键字搜索列表
* @param searchMap
* @return
*/
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<Item> page = solrTemplate.queryForHighlightPage(query, Item.class); for ( HighlightEntry<Item> h : page.getHighlighted()) {//循环高亮入口集合
Item item = h.getEntity();//获得原实体类
//获取高亮列表(高亮域的个数) h.getHighlights();
//获取每个域有可能存储多值 h.getSnipplets()
//获取要高亮的内容 h.getSnipplets.get(0);
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;
}
}

前端显示:

angularJS为了防止html攻击采取的安全机制,所以不能直接显示html的结果。

我们就要用到$sce服务的trustAsHtml方法来实现转换。

/*$sce服务写成过滤器*/
app.filter('trustHtml',['$sce',function ($sce) {
return function (data) {//传入参数是被过滤的内容
return $sce.trustAsHtml(data);//返回的是过滤后的内容(信任html的转换)
}
}]);

使用过滤器

ng-bind-html指令用于显示html内容

竖线 | 用于调用过滤器

<div class="attr" ng-bind-html="item.title | trustHtml">
<em>{{item.title}}</em>
</div>

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

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

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

  2. Spring Data Solr教程(翻译)

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

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

    spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...

  4. Spring Data Solr —— 快速入门

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

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

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

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

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

  7. Solr和Spring Data Solr

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

  8. Spring Data Solr

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

  9. Spring Data Solr相关配置

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

随机推荐

  1. [转]Redis内部数据结构详解-sds

    本文是<Redis内部数据结构详解>系列的第二篇,讲述Redis中使用最多的一个基础数据结构:sds. 不管在哪门编程语言当中,字符串都几乎是使用最多的数据结构.sds正是在Redis中被 ...

  2. maven仓库中心mirrors配置多个下载中心(执行最快的镜像)

    E:\Program FilesApache Software Foundationapache-maven-3.5.4-binconf\settings.xmlmaven仓库中心mirrors配置多 ...

  3. Python时间,日期,时间戳之间转换,时间转换时间戳,Python时间戳转换时间,Python时间转换时间戳

    #1.将字符串的时间转换为时间戳方法: a = "2013-10-10 23:40:00" #将其转换为时间数组 import time timeArray = time.strp ...

  4. 卷积转换为矩阵运算中填充数的计算-GEMM

    背景:最近在写一个基于opencl的正向神经网络框架,项目地址 https://github.com/aktiger/YoloOCLInference ,我从这里https://github.com/ ...

  5. npm install 项目安装遇到问题

    npm cache clean/clear --force

  6. docker下创建crontab定时任务失败

    创建过程 基础镜像采用的centos7.2,需要安装一下crontab,在dockerfile中加以下语句就可以了: # crontab jobs RUN yum -y install crontab ...

  7. Oracle中判断字段是否为数字

    在我们平常的开发中可能会遇到这样的问题,就是判断某一列是否全部由数字组成,我们都知道oracle并没有给我们提供这样一个现成的函数,那么根据我的经验我总结了两个行之有效的方法(列名:column,表名 ...

  8. hdoj:2061

    #include <iostream> #include <string> using namespace std; int main() { int n,k; double ...

  9. java通过jdbc访问mysql,update数据返回值的思考

    java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...

  10. 基数计数——HyperLogLog

    所谓的基数计数就是统计一组元素中不重复的元素的个数.如统计某个网站的UV,或者用户搜索网站的关键词数量:再如对一个网站分别统计了三天的UV,现在需要知道这三天的UV总量是多少,怎么融合多个统计值. 1 ...