SpringBoot 2.2.2集成ElasticSearch 7.5.1
2024-08-28 02:14:09
前言:现在公司有一个项目要用到检索功能,检索上面现在最常用的是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
这样就算是集成完了.
最新文章
- Spring 4 集成Apache CXF开发JAX-RS Web Service
- java 基础三 下雪
- Hadoop基础知识
- C#知识点总结系列:C# 数据结构
- HeadFirst设计模式之命令模式
- Android 把从网络获取的图片缓存到内存中
- DictoryInfo.GetFiles
- Android Monkey 测试策略【转】
- 实验一 windows基本网络命令
- C# — 调用dll出现试图加载不正确格式的程序问题
- componentWillMount和componentDidMount的区别
- java常见面试题及答案 11-20(JVM)
- 【模板】Treap
- JavaScript学习(五)
- .Net Core 全球化&;本地化的使用
- tomcat jvm 内存调优 适用于 JDK 6 &; 7
- laravel 5.1部署到 集成环境 lnmp上
- missing gradle project information
- HTTP、TCP、UDP以及SOCKET
- codeforces315Div1 B Symmetric and Transitive
热门文章
- 操作CLOB数据——oracle
- SPOJ - AMR11H Array Diversity (排列组合)
- CodeForces - 710E Generate a String (dp)
- c++ opencv 入门
- 1 ~ express ~ 初始化。安装第三方模块express。中间件
- 颜色设置 <;color name=";white";>;#FFFFFF<;/color>;<;!--白色 -->;
- python字符串常用函数
- URAL_1146/uva_108 最大子矩阵 DP 降维
- Android自定义View——刮刮卡效果
- PTA天梯赛L2