springboot使用RestHighLevelClient操作es
之前博客中已经写过集成es6.3了,今天回过头来看觉得之前的太麻烦了,现在使用的是es官方的
具体的api可以查看下官方文档,老样子本次博文还是采用docker进行搭建
进行环境配置
安装es7.1
拉取镜像
docker pull elasticsearch:7.1.0
运行镜像
指定了最大日志文件,因为这个服务的日志文件实在太大了
docker run -d --log-opt max-size=10m -e "discovery.type=single-node" --name es -p 9200:9200 -p 9300:9300 elasticsearch:7.1.0
进入容器,安装中文ik分词器
docker exec -it es /bin/bash
ik分词器地址https://github.com/medcl/elasticsearch-analysis-ik/,自己下载对应版本,下面的命令太长了,复制到一行执行
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
添加密码认证(可选)
还是在容器中进行操作,在/usr/share/elasticsearch/config中的elasticsearch.yml中添加下面的配置
重启es
重启后进入es,进行密码配置
elasticsearch-setup-passwords interactive
依次输入密码就行
安装kibana7.1(可选)
拉取镜像
docker pull kibana:7.1.0
运行镜像
docker run -d -it --name=kibana -p 5601:5601 kibana:7.1.0
要是上一步配置了密码,就需要修改kibana的配置文件
#修改es配置文件kibana.yml
vi /usr/share/kibana/config/kibana.yml
#添加以下内容
elasticsearch.username: "elastic"
elasticsearch.password: "*****"
重启kibana
访问URL验证结果
- 访问es http://host:9200
用户名:elastic
密码:之前设置的密码 - 访问kibana http://host:5601
用户名:elastic
密码:之前设置的密码
进行springboot的集成
-
首先配置maven依赖,本次用的是highlevelclient
<!-- es--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.1.0</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.1.0</version> </dependency>
-
配置es
-
首先在yml中进行常见配置
elasticsearch: host: localhost port: 9200 connTimeout: 3000 socketTimeout: 5000 connectionRequestTimeout: 500 # 索引名称 index-name: contentik username: elastic password: 123456
-
新建es配置类
后续所有的操作都是通过这个client来进行的
package com.pgy.esdemo.config; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author: Kevin * @Description: * @Date: create in 2021/5/11 15:21 */ @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.username}") private String USERNAME; @Value("${elasticsearch.password}") private String PASSWORD; @Bean(destroyMethod = "close", name = "client") public RestHighLevelClient initRestClient() { //如果没配置密码就可以不用下面这两部 final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(USERNAME, PASSWORD)); RestClientBuilder builder = RestClient.builder(new HttpHost(host, port)) .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder .setConnectTimeout(connTimeout) .setSocketTimeout(socketTimeout) .setConnectionRequestTimeout(connectionRequestTimeout)) //没有密码可以不用这一个set .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { httpClientBuilder.disableAuthCaching(); return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); } }); return new RestHighLevelClient(builder);
-