SpringBoot 2.2.2集成ElasticSearch 7.5.1
前言:现在公司有一个项目要用到检索功能,检索上面现在最常用的是Solr/ES,最后经过对比选择了ElasticSearch开源组件包,因为这个是公司的一个产品项目,技术版本当然要用最新的啦,最后完全确定的技术是SpringBoot2.2.2+es7.5.1.好了废话不多说;上硬菜.
材料:
1: SpringBoot 2.2.2快速脚手架
2: ElasticSearch7.5.1 for Linux
1 安装ElasticSearch
安装就不说了,安装文档一大堆,网上百度去吧。
2 项目的pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.5.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
<scope>runtime</scope>
</dependency>
3: 集成开始
ElasticSearch的发展历史,简单的说就是渐渐的淘汰了以前类似于redis-client那样类似的客户端API模式,现在基本上都是基于Restful规范的APIS,根据官方文档说明的推荐就是这样的Http请求方式,它分为两个版本的rest-client,第一个是高级版本、第二个是普通版本,对于我们程序员来说,毋庸置疑高级版本啦。
3.1 集成第一篇
集成之前确保ElasticSearch的服务是启动的,不然会发生链接超时保存.
第一种方式:
使用工具类的方式集成:
新建一个ElasticServerUtils类,代码如下:
@Component
public class ElasticServiceUtils { /**
* <li>logger :SLF4J日志 </li>
*/
private final static Logger logger = LoggerFactory.getLogger(ElasticServiceUtils.class); private RestHighLevelClient restHighLevelClient; /**
* <li>Description: 在Servlet容器初始化前执行 </li>
*/
@PostConstruct
private void init() {
try {
if (restHighLevelClient != null) {
restHighLevelClient.close();
}
//节点1和2
HttpHost node1 = new HttpHost("192.168.10.40", 9200, "http");
HttpHost node2 = new HttpHost("192.168.10.95", 9200, "http");
RestClientBuilder builder = RestClient.builder(node1,node2);
restHighLevelClient = new RestHighLevelClient(builder);
} catch (IOException e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
//省略创建索引更新索引等代码,官网有具体的例子.
//官网地址: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-index.html
}
第二种方式:
这个方式就是和Spring框架深度集成,类似将RestHighLevelClient类的生命周期交给Spring区管理, 优点是使用方便直接使用@Autowired注解就可以获取到对象.缺点是相对的复杂.
第一步: 需要编写Bean的托管和创建配置.
代码:
/**
* <li>hosts :配置的值 </li>
*/
@Value("${elasticsearch.hosts}")
private String[] hosts; /**
* <li>restHighLevelClient :restHighLevel客户端 </li>
*/
private RestHighLevelClient restHighLevelClient; /**
* 返回实例
* @return RestHighLevelClient
* @throws Exception 异常信息
*/
@Override
public RestHighLevelClient getObject() throws Exception {
return this.restHighLevelClient;
} /**
* 反射
*
* @return RestHighLevelClient.class
*/
@Override
public Class<?> getObjectType() {
return RestHighLevelClient.class;
} /**
* 客户端是否单例
* @return true
*/
@Override
public boolean isSingleton() {
return true;
} /**
* 客户端实例的销毁
* @throws Exception 异常信息
*/
@Override
public void destroy() throws Exception {
if (restHighLevelClient != null) {
restHighLevelClient.close();
}
} /**
* 注入参数
* @throws Exception 异常信息
*/
@Override
public void afterPropertiesSet() throws Exception {
restHighLevelClient = buildClient();
} /**
* <li>Description: 自定义的构造方法 </li>
*
* @return RestHighLevelClient
*/
private RestHighLevelClient buildClient() {
try {
//这里的builder方法有两个方式,第一个是传入Node(包含了多个节点,需要密码这些,我们没有配置,就暂时不需要),第二个就是传入HttpHost
restHighLevelClient = new RestHighLevelClient(RestClient.builder(HttpHost.create(hosts[0]), HttpHost.create(hosts[1])));
} catch (Exception e) {
logger.error(e.getMessage());
}
return restHighLevelClient;
}
配置代码:
elasticsearch:
hosts: 192.168.10.40:9200,192.168.10.95:9200
这样就算是集成完了.
SpringBoot 2.2.2集成ElasticSearch 7.5.1的更多相关文章
- springboot集成elasticsearch
在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...
- SpringBoot 集成 Elasticsearch
前面在 ubuntu 完成安装 elasticsearch,现在我们SpringBoot将集成elasticsearch. 1.创建SpringBoot项目 我们这边直接引入NoSql中Spring ...
- ElasticSearch(八):springboot集成ElasticSearch集群并使用
1. 集群的搭建 见:ElasticSearch(七) 2. springboot配置集群 2.1 创建springboot项目,使用idea创建,不过多介绍(创建项目时候建议不要勾选elastics ...
- 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索
安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...
- SpringBoot电商项目实战 — ElasticSearch接入实现
如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...
- spring-boot+mybatisPlus+shiro的集成demo 我用了5天
spring-boot + mybatis-plus + shiro 的集成demo我用了五天 关于shiro框架,我还是从飞机哪里听来的,就连小贱都知道,可我母鸡啊.简单百度了下,结论很好上手,比s ...
- 微服务学习二:springboot与swagger2的集成
现在测试都提倡自动化测试,那我们作为后台的开发人员,也得进步下啊,以前用postman来测试后台接口,那个麻烦啊,一个字母输错就导致测试失败,现在swagger的出现可谓是拯救了这些开发人员,便捷之处 ...
- SpringBoot(2.0.4.RELEASE)+Elasticsearch(6.2.4)+Gradle简单整合
记录一下SpringBoot(2.0.4.RELEASE)+Elasticsearch(6.2.4)+Gradle整合的一个小例子. 1.在Gradle内加入相关jar包的依赖: compile('o ...
- springboot与swagger2的集成
springboot与swagger2的集成 1.出现的背景 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染变成了:前端渲染.先后端分离的形态,而前端和后端的唯一联系,变成了API接口: ...
随机推荐
- Bean XML 配置(3)- 依赖注入配置
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
- mp4流化
MP4需要流化 不然会频繁seek 对于http形式的播放而言 苦不堪言 ffmpeg -i g:/media/err.mp4 -movflags +faststart -codec copy g:/ ...
- ORACLE 将一个库的部分值带条件插入到另外一个库
将一个表插入另外一个表,两种方法: 1.insert into table1 select * from table2 ; 或者2.create table1 as select * from tab ...
- BZOJ 2749 [HAOI2012]外星人
题解:对每一个>2的质数分解,最后统计2的个数 注意:如果一开始没有2则ans需+1,因为第一次求phi的时候并没有消耗2 WA了好几遍 #include<iostream> #in ...
- 下页小希学MVC5+EF6.2 学习记录三
目的:1 学习mvc+ef 2 写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...
- BGP(IBGP“内部路由器”和EBGP“外部路由器”)命令解析
BGP:基于策略的路径向量路由协议. ①:(attribute)属性描述路径. ②:使用TCP(端口179)作为传输协议——(IBGP多使用loopback端口建立update-source) IBG ...
- 【数据结构】C++语言环形队列的实现
队列--先进先出 队列的一个缺点--出队后的内存空间浪费了,不能二次利用 环形队列--解决以上缺点的队列,用过的内存空间可以重复利用 github: https://github.com/HITFis ...
- POJ 1006:Biorhythms 中国剩余定理
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 121194 Accepted: 38157 Des ...
- HTML与CSS结合的四种方式
HTML与CSS结合的四种方式: 方式一:每个标签加一个属性: 例如:<div style="background-color:red; color: green"> ...
- Python说文解字_Python之多任务_04
问:并发.并行.同步.异步.阻塞.非阻塞 答: 并发.并行: 并发是指一个时间段内(不是指的时间点),有几个程序在同一个CPU上运行,但是任意时刻只有一个程序在CPU上运行.对人类的时钟来说1秒钟能干 ...