引言:

  solr搭建起后,就该应用到java后台开发里了,接下来就用springboot整合应用solr

一:引入jar包

  

<!--solr-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>4.0.6.RELEASE</version>
</dependency> <!--操作solr的工具-->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.0.0</version>
</dependency>

二:对application配置文件进行配置(mycore1是我创建的核心,具体名字改为你所创建的核心)

spring:
data:
solr:
host: http://127.0.0.1:8983/solr/mycore1

三:接下来就是代码操作了(详细解释看注解),这个只是我的服务层

@Service
public class SearchService { @Autowired
private SolrClient solrClient;
//search就是搜索的内容,currentpage是因为我做了分页,如果没做分页可忽略此参数
public PageResult searchNews(String search,int currentPage) throws IOException, SolrServerException {
// 创建solr查询对象
SolrQuery query = new SolrQuery();
if(null != search && !"".equals(search)){
// 设置查询关键词
query.setQuery(search);
// 设置默认查询域
query.set("df", "news_keywords");
}
// 高亮显示
query.setHighlight(true);
// 设置高亮显示字段
query.addHighlightField("newsTitle,newsAbstract");
query.setHighlightSimplePre("<span style='color:red'>");
query.setHighlightSimplePost("</span>");
// 设置排序规则
query.setSort("newsTime",SolrQuery.ORDER.desc);
// 设置返回格式
query.set("wt","json");
// 设置分页
query.set("start", (currentPage - 1) * 10);
query.set("rows", 10);
// 进行查询得到返回结果
QueryResponse queryResponse = solrClient.query(query);
// 取出高亮部分
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
// 得到主体数据部分
SolrDocumentList results = queryResponse.getResults(); ArrayList<NewsWithBLOBs> newsList = new ArrayList<>();
// 对主体数据进行遍历,将数据依次保存到news对象中,然后将news对象加入list集合就是查询到的所有新闻
for (SolrDocument result : results){
NewsWithBLOBs news = new NewsWithBLOBs();
news.setNewsId(result.get("id").toString());
news.setNewsCover(result.get("newsCover").toString());
news.setNewsTime((Date) result.get("newsTime"));
news.setNewsBrowse((Integer) result.get("newsBrowse"));
news.setNewsSchoolid(result.get("newsSchoolid").toString());
news.setNewsCategoryid(result.get("newsCategoryid").toString());
news.setNewsAbstract(result.get("newsAbstract").toString());
news.setNewsContent(result.get("newsContent").toString());
// 设置高亮部分,下边是得到指定新闻id的高亮部分,并且将高亮部分设置进入对象中
Map<String, List<String>> map = highlighting.get(result.get("id"));
List<String> list = map.get("newsAbstract");
if(null != list && list.size() > 0){
String newsAbstract = list.get(0);
news.setNewsAbstract(newsAbstract);
}
List<String> list1 = map.get("newsTitle");
if(null != list1 && list1.size() > 0){
String newsTitle = list1.get(0);
news.setNewsTitle(newsTitle);
}
newsList.add(news);
} // 得到所获得的新闻条数
long numFound = results.getNumFound();
// 下边是我自己的分页封装,可忽略,上边的到的newslist就是获得的所有新闻
PageResult result = new PageResult();
result.setRecordCount(numFound);
System.out.println(numFound);
result.setTotalPages((int) (numFound%10 == 0 ? numFound/10 : numFound/10+1));
result.setList(newsList);
return result;
}
}

  

通过上边就能获取到指定的查询对象了,并且高亮显示也正常

solr8.0 springboot整合solr(四)的更多相关文章

  1. springboot整合solr

    上一篇博客中简要写了solr在windows的安装与配置,这一篇接上文写一下springboot整合solr,代码已经上传到github,传送门. 1.新建core并配置schema 上篇博客中已经有 ...

  2. solr(四) : springboot 整合 solr

    前言: solr服务器搭起来, 数据导入之后, 就该应用到项目中去了. 那在项目中, 该怎么整合和应用solr呢? 接下来, 就来整合和应用solr 一. 整合 1. 引入jar包 <prope ...

  3. SpringBoot整合Shiro 四:认证+授权

    搭建环境见: SpringBoot整合Shiro 一:搭建环境 shiro配置类见: SpringBoot整合Shiro 二:Shiro配置类 shiro整合Mybatis见:SpringBoot整合 ...

  4. SpringBoot整合NoSql--(四)Session共享

    简介: 正常情况下,HttpSession是通过Servlet 容器创建并进行管理的,创建成功之后都是保存在内存中.如果开发者需要对项目进行横向扩展搭建集群,那么可以利用一些硬件或者软件工具来做负载均 ...

  5. SpringBoot整合Redis、ApachSolr和SpringSession

    SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...

  6. SpringBoot整合elasticsearch(三)

    Docker安装elasticsearch 启动注意2点,1是内存,2是线程数(此处进行简单安装,后面会详细补充es文档) [root@topcheer ~]# docker images REPOS ...

  7. springboot整合多数据源解决分布式事务

    一.前言        springboot整合多数据源解决分布式事务.             1.多数据源采用分包策略              2.全局分布式事务管理:jta-atomikos. ...

  8. springboot(十四):springboot整合shiro-登录认证和权限管理(转)

    springboot(十四):springboot整合shiro-登录认证和权限管理 .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...

  9. SpringBoot整合MyBatis与MySql8.0

    一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...

随机推荐

  1. 面试题-浅谈JavaScript中的This指向问题

    各位小伙伴在面试中被面试官问道this指向问题一定不少吧,同时还被问道apply,call和bind的用法区别,现在,就来简单的聊一聊this到底指向何方. 1.基本概念 MDN的官方解释:与其他语言 ...

  2. .netcore2.1在控制器中和类中,获取appsettings中值的方法

    一般我们在开发项目中,都会从配置文件中获取数据库连接信息.自定义参数配置信息等. 在.netcore中在控制器和自定义类中,获取配置文件中参数方式如下: appsettings.json { &quo ...

  3. ajax调用WebAPI添加数据

    //获取账号名 var Name = document.getElementById("Text1").value;//获取密码 var Pass = document.getEl ...

  4. Fundebug微信小程序错误监控插件更新至1.1.0,新增test()与notifyHttpError()方法

    摘要: 1.1.0新增fundebug.test()和fundebug.notifyHttpError()方法,同时大小压缩至15K. Fundebug是专业的小程序BUG监控服务,可以第一时间为您捕 ...

  5. css公共库——清除浮动

    清除浮动是css的基础,但有时候会忘了一些最简单的东西 浮动因为在文档流之外,所以会造成父元素的坍塌.父元素之后的元素排版就会乱. 常用的方法是在浮动父元素中添加cf类,然后定义cf样式,并将其放在公 ...

  6. 开源ERP Odoo仓存功能模块深度应用(一)

    基本功能 库位 库位是一个逻辑存货区,可以是一个物理库区,可以是一个货架.货架上的一个货位.库位可以有子库位 库位有虚拟库位和实际库位,实际库位是实际存放货物的库位,虚拟库位是因复式库存记账而虚构的库 ...

  7. Flutter 即学即用系列博客——07 RenderFlex overflowed 引发的思考

    背景 在进行 Flutter UI 开发的时候,控制台报出了下面错误: flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY >╞════════ ...

  8. 写个重新加载 ocelot 配置的接口

    写个重新加载 ocelot 配置的接口 Intro 我们想把 ocelot 的配置放在自己的存储中,放在 Redis 或者数据库中,当修改了 Ocelot 的配置之后希望即时生效,又不想在网关这边定时 ...

  9. python3 字符编码与转码的理解

    额...上通识课讲到了NLP12条,感觉讲的挺好的,照着抄一条先... 1,没有两个人是一样的 没有两个人的人生经验会完全一样,所以没有两个人的信念,价值和规条系统会是一样. 因此没有两个人对同一件事 ...

  10. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...