SpringBoot|SpringBoot + ES基本项目搭建实例

SpringBoot|SpringBoot + ES基本项目搭建实例
文章图片

【搜索系列】ES基本项目搭建
之前一直没有写ES相关的博文,现在开始补课,预计5-6篇博文将es的使用姿势展示给各位小伙伴;本文将作为es结合springboot的第一篇博文,基本项目环境搭建

I. 项目搭建 1. 项目依赖
本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发
开一个web服务用于测试
org.elasticsearch.client elasticsearch-rest-high-level-client

2. 配置信息
配置文件application.yml,注意下面的配置信息,下面采用的是由我们自己来解析配置的方式
elasticsearch: host: localhost port: 9200 user: elastic pwd: test123 connTimeout: 3000 socketTimeout: 5000 connectionRequestTimeout: 500

【SpringBoot|SpringBoot + ES基本项目搭建实例】说明
上面配置介绍的是一种偏基础的es文档操作姿势,相比较于封装得更好的spring-boot-starter-data-elasticsearch,使用更加灵活
II. SpringBoot结合ES使用 1. RestHighLevelClient 初始化
接下来我们基于RestHighLevelClient来操作es,首先第一步就是需要初始化这实例
@Getter @Configuration public class ElasticsearchConfiguration {@Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private int port; @Value("${elasticsearch.connTimeout}") private int connTimeout; @Value("${elasticsearch.socketTimeout}") private int socketTimeout; @Value("${elasticsearch.connectionRequestTimeout}") private int connectionRequestTimeout; @Value("${elasticsearch.user}") private String user; @Value("${elasticsearch.pwd}") private String pwd; @Bean(destroyMethod = "close", name = "client") public RestHighLevelClient initRestClient() { RestClientBuilder builder = RestClient.builder(new HttpHost(host, port)) .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder .setConnectTimeout(connTimeout) .setSocketTimeout(socketTimeout) .setConnectionRequestTimeout(connectionRequestTimeout)); return new RestHighLevelClient(builder); } }

注意上面的实现,用户名 + 密码并没有使用,当es设置了用户名、密码之后,是通过每次请求时,在请求头基于Basic Auth方式进行身份验证的;后面会介绍到
2. 基本使用
我们在本机搭建了一个es用于模拟测试,在上面的配置完之后,就可以直接与es进行交互了
es安装可以参考:
  • 200605-Centos 安装ElasticSearch - 一灰灰Blog
  • 210329-Elastic & Kibana安装与基本使用 - 一灰灰Blog
    docker安装: docker pull docker.elastic.co/elasticsearch/elasticsearch:xxx
下面是一个简单的使用姿势
@Service public class EsTest { @Autowired private RestHighLevelClient client; private static String auth; public EsTest(ElasticsearchConfiguration elasticsearchConfiguration) { auth = Base64Utils.encodeToString((elasticsearchConfiguration.getUser() + ":" + elasticsearchConfiguration.getPwd()).getBytes()); auth = "Basic " + auth; }public void testGet() throws Exception { // 文档查询 GetRequest getRequest = new GetRequest("first-index", "_doc", "gvarh3gBF9fSFsHNuO49"); RequestOptions.Builder requestOptions = RequestOptions.DEFAULT.toBuilder(); requestOptions.addHeader("Authorization", auth); GetResponse getResponse = client.get(getRequest, requestOptions.build()); if (getResponse.isExists()) { String sourceAsString = getResponse.getSourceAsString(); System.out.println(sourceAsString); } else { System.out.println("no string!"); } } }

注意上面的实现,有下面几个重要知识点
身份验证
采用Basic Auth方式进行身份校验,简单来说就是在请求头中添加一个
  • key = Authorization
  • value = "https://www.it610.com/article/Basic" + base64(user + ":" + pwd)
访问姿势
上面是一个根据id查询文档的实例,简单可以理解为三步
  • 创建:XxRequest
  • 添加请求头:RequestOptions.Builder.addHeader
  • 执行: client.get(xxRequest, RequestOptions)
III. 不能错过的源码和相关知识点 0. 项目
  • 工程:https://github.com/liuyueyi/spring-boot-demo
  • 源码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/142-search-es
1. 微信公众号: 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
  • 一灰灰Blog个人博客 https://blog.hhui.top
  • 一灰灰Blog-Spring专题博客 http://spring.hhui.top
SpringBoot|SpringBoot + ES基本项目搭建实例
文章图片

    推荐阅读