solr8.0 springboot整合solr(四)
引言:
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(四)的更多相关文章
- springboot整合solr
上一篇博客中简要写了solr在windows的安装与配置,这一篇接上文写一下springboot整合solr,代码已经上传到github,传送门. 1.新建core并配置schema 上篇博客中已经有 ...
- solr(四) : springboot 整合 solr
前言: solr服务器搭起来, 数据导入之后, 就该应用到项目中去了. 那在项目中, 该怎么整合和应用solr呢? 接下来, 就来整合和应用solr 一. 整合 1. 引入jar包 <prope ...
- SpringBoot整合Shiro 四:认证+授权
搭建环境见: SpringBoot整合Shiro 一:搭建环境 shiro配置类见: SpringBoot整合Shiro 二:Shiro配置类 shiro整合Mybatis见:SpringBoot整合 ...
- SpringBoot整合NoSql--(四)Session共享
简介: 正常情况下,HttpSession是通过Servlet 容器创建并进行管理的,创建成功之后都是保存在内存中.如果开发者需要对项目进行横向扩展搭建集群,那么可以利用一些硬件或者软件工具来做负载均 ...
- SpringBoot整合Redis、ApachSolr和SpringSession
SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...
- SpringBoot整合elasticsearch(三)
Docker安装elasticsearch 启动注意2点,1是内存,2是线程数(此处进行简单安装,后面会详细补充es文档) [root@topcheer ~]# docker images REPOS ...
- springboot整合多数据源解决分布式事务
一.前言 springboot整合多数据源解决分布式事务. 1.多数据源采用分包策略 2.全局分布式事务管理:jta-atomikos. ...
- springboot(十四):springboot整合shiro-登录认证和权限管理(转)
springboot(十四):springboot整合shiro-登录认证和权限管理 .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...
- SpringBoot整合MyBatis与MySql8.0
一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...
随机推荐
- 使用MediatR重构单体应用中的事件发布/订阅
标题:使用MediatR重构单体应用中的事件发布/订阅 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10640280.html 源代码:https ...
- 刨根问底:if 后怎么就可以跟对象,变量交换写法是语法糖吗?
1.万物皆可布尔 一般语言中的 if 语句语法是这样的: if (条件表达式){ 执行语句} 而在 Python 中,if 后面不仅可以是条件表达式,还可以是任意对象.例如: my_list = ...
- Service Fabric service 根据环境变量读取配置文件
前言 一个服务或者产品,往往需要三个环境:一个开发环境(Development),一个测试环境(Staging),一个生产环境(Production), 这就不可避免的需要多个配置文件来匹配相应的环境 ...
- 自定义GridLookUpEdit编辑器
本文版权归博主 惊梦无痕 所有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作.SourceLink 前两天分享了GridControl的自定义编辑器,今天再来分享一下整理出来的GridLo ...
- 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)
现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...
- 兼容性:Adapter(适配器模式)【PHP】
Adapter(适配器模式) ---- 加个“适配器”以便于复用 将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景 如果 ...
- bat脚本自定义魔兽warIII运行分辨率,去黑边
我们一般平时安装完WarIII后运行时的分辨率默认是800*600,导致有黑边的存在.所以我写了一个bat脚本来自定义WarIII的运行分辨率.需要以管理员身份运行. 下载链接: 链接:https:/ ...
- windows下 jdk1.7安装教程图解
java编程的初学者在开始编码前都会遇到一个难题,那就是jdk1.7环境变量配置怎么操作,怎么安装,针对这个难题,小编特地为大家整理相关教程,不了解的朋友可以前往查看使用. 软件说明 虽然现在jdk出 ...
- PHP全栈学习笔记5
php与mysql数据库,PHP支持很多数据库,与mysql为牛逼组合,mysql数据库的基础知识的掌握是由必要的,要了解如何操作mysql数据库,数据表的方法. 什么是数据库,数据库能做什么,数据库 ...
- MySQL学习(四)Join 等开发常用的操作 --- 2019年2月
1.查数据太多不会把内存用光 InnoDB 的数据是保存在主键索引上,然后索引树分割保存在数据页上,数据页存在内存中/磁盘.change buffer 就是先把修改操作记录,然后读数据的时候,内存没有 ...