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接口: ...
随机推荐
- spring源码 AutowireCapableBeanFactory接口
对于想要拥有自动装配能力,并且想把这种能力暴露给外部引用的BeanFactory类需要实现此接口.正常情况下,不要使用此接口应该更倾向于使用BeanFactory或者ListableBeanFacto ...
- mybaits入门学习
学习了简单的mybatis的配置 Bean层: 这个都会很简单 一个完整的Bean 需要getter和setter方法还需要一个空的构造方法和一个满的构造方法. Dao层: 创建一个接口就ok了 pa ...
- C/C++ SQLite 之基础篇
文章目录: 1. 下载 SQLite3 源码: 2. 下载 SQLite3.dll 文件: 3. 生成 SQLite3.lib 文件 : 4. 生成或者下载 SQL ...
- HTML隐藏
JS: $("#department").hide(); JSP: <th id="department" width="5%"> ...
- UltraISO制作manjaro系统盘,使用优盘
下载系统镜像 默认是清华镜像 刻入方式一定要选RAW方式
- RecyclerView+FloatingActionButton应用
一.效果图 二.实现步骤 1.XML布局-添加依赖 <LinearLayout android:id="@+id/layout" android:layout_width=& ...
- Upgrade to 17.1 from 17.0 problem:UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 50: ordinal not in range(128)
最近 gentoo 从 17.0 更新到 17.1, 需要手动进行升级配置,使用 unsymlink-lib -p --finish 这一步的时候报错,报错如下: /usr/lib/python-ex ...
- SQL常用短语小记-持续更新
创建链接服务器语句 --//创建链接服务器[在本地服务器创建] exec sp_addlinkedserver '链接服务器名称','','SQLOLEDB','远程服务器地址' -- exec sp ...
- LeJOS下eclipse通过USB连接EV3
适用情况:在eclipse安装好LeJOS插件后,再通过USB连接EV3. 第一:更新驱动 在<设备管理器-网络适配器>下更新RNDIS/Ethernet Gadget,电脑需要先连接EV ...
- eclipse上部署到tomcat不能自动部署maven管理的额jar包